1.C++可以给函数默认值
C++在定义时可以给函数默认值
1.int sum(int a,int b=10)
{
return a+b;
}
在调用sum 函数时不给参数b的值系统会默认b的值为10;
2.C++在给函数默认值时是从左至右如
int sum(int a=1,int b,int c)
int sum(int a=1,int b,int c)
是错的。因为系统会产生二义性不知道该给哪个参数赋值。
1.内联函数inline
c++的内联函数是在编译时 在调用点把内联函数的代码展开在调用点处,并不会产生函数符号
类如:
Inline Int sum (int a,int b)
{return a+b;}
Main()
{
Int x=10;
Int y=20;
Sum(x,y);
}
编译时就是
Main()
{
Int x=10;
Int y=20;
x+y;
}
并不会给sum函数开辟个新栈,而是直接的代码替换。
看起来内联函数和宏很相像,那他们的区别在哪?
区别就是 宏是单纯的字符替换,在预编译的阶段,不会做任何的词法解析,类型检查,也就是说宏出错的可能性非常高,不安全。而inline内敛函数是在编译时期,会进行词法解析,类型检查,词法、类型有误就会编译失败。所以说,inline相当于安全版的宏。
内联函数只在本文件可见。
最后值得注意的是内敛函数只算一个给编译器的建议,也就是说编译器可能不会使用内敛,因为某些函数使用代码替换会导致错误,比如递归函数,递归的核心就是开辟栈帧递归数据然后层层计算最后收尾,简单的代码替换确定不了递归的尾巴?
3.函数的重载
c语言中函数名不能重复定义。
C++中函数的命名可以重复,但重名的函数提供的参数不能相同。因为C++的函数符号的产生是由函数名和参数类型决定的。
函数的重载必须得在同一个作用域内。