编程菜鸟到大佬之路:C++程序设计(九)

第三章 函数

含有可变参数的函数


  • C++标准中提供了两种主要的方法

    • 如果所有的实参类型相同,可以传递一个名为 initializer_list 的标准库类型;
    • 如果实参的类型不同,我们可以编写可变参数的模板。
  • initializer_list

    • initializer_list 是一种标准库类型,用于表示某种特定类型的值的数组,该类型定义在同名的头文件中。
  • initializer_list 提供的操作
    在这里插入图片描述

  • initializer_list 的使用方法

    • initializer_list 是一个类模板;
    • 使用模板时,我们需要在模板名字后面跟一对尖括号,括号内给出类型参数:
      • initializer_list<string> ls; // initializer_list 的元素类型是 string
      • initializer_list<int> li; // initializer_list 的元素类型是 int
    • initializer_list 其对象中的元素永远是常量值,我们无法改变 initializer_list 对象中元素的值;
    • 含有 initializer_list 形参的函数也可以同时拥有其他形参。
  • initializer_list 使用举例

    • 在编写代码输出程序产生的错误信息时,最好统一用一个函数实现该功能,使得对所
      有错误的处理能够整齐划一。然而错误信息的种类不同,调用错误信息输出函数时传
      递的参数也会各不相同。
    • 使用 initializer_list 编写一个错误信息输出函数,使其可以作用于可变数量的形参。

内联函数


  • 内联函数

    • 声明时使用关键字 inline;
    • 编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销;
    • 内联函数体内不能有循环语句和 switch 语句;
    • 内联函数的定义必须出现在内联函数第一次被调用之前;
    • 对内联函数不能进行异常接口声明。
  • 内联函数应用举例

    #include "pch.h"
    #include<iostream>
    using namespace std;
    
    const double PI = 3.14159265358979;
    inline double calArea(double radius) {
    	return PI * radius * radius;
    }
    
    int main() {
    	double r = 3.0;
    	double area = calArea(r);
    	cout << area << endl;
    	return 0;
    }
    

constexpr 函数


  • constexpr 函数语法规定

    • constexpr 修饰的函数在其所有参数都是 constexpr(常量表达式) 时,一定返回 constexpr(常量表达式);
    • 函数体中必须有且仅有一条 return 语句。
  • constexpr 函数举例

    • constexpr int get_size() { return 20; }
    • constexpr int foo = get_size(); //正确: foo 是一个常量表达式

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/86770415