函数的参数传递
在函数被调用时才分配形参的存储单元
实参可以是常量,变量,或者表达式
实参类型必须与形参相符
值传递是传递参数值,即单向传递
引用传递可以实现双向传递
常引用参数可以保障实参数据的安全
含有可变参数的函数
- 如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型
- 如果实参的类型不同,我们可以编写可变参数的模板
initializer_list的对象中的元素永远是常量值,我们无法改变initializer_list对象中元素的值。
含有initializer_list形参的函数也可以同时拥有其他形参。
内联函数
关键字inline
- 内联函数体内不能有循环语句和switch语句
- 内联函数的定义必须出现在内联函数第一次被调用之前
- 对内联函数不能进行异常接口声明
inline double calArea(double radius) {
return PI * radius * radius;
}
constexpr函数语法规定
常量表达式函数
constexpr修饰的函数在其所有参数都是constexpr时,一定返回constexpr;
函数体中必须有且仅有一条return语句。
constexpr int get_size() { return 20; }
constexpr int foo = get_size(); //正确:foo是一个常量表达式
带默认参数值的函数
- 有默认值得形参必须在形参列表的最右边。
int add(int x, int y = 5, int z = 6);//正确
int add(int x = 1, int y = 5, int z);//错误
int add(int x = 1, int y, int z = 6);//错误
- 可以预先设置默认的参数值,调用时如给出实参,则采用实参值,否则采用预先设置的默认参数值。
int main()
{
add(10,20);//10+20
add(10);//10+6
add();//5+6
}
int add(int x = 5, int y = 6)
{
return x+y;
}
函数重载
C++允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。重载函数的形参必须不同:个数不同或类型不同。