在函数的很多次调用中他们都被赋予一个相同的值。我们把这个反复出现的值称为默认实参
- 调用含有默认实参的函数时,可以包含该实参也可以省略该实参。
- 一旦某个实参被赋予了默认值,它后面所有的形参都必须有默认值。
例:
string screen(int ht = 24,int sz = 80,string s=‘ ’ )
- 函数调用时,实参负责填补函数调用缺少的尾部实参(靠右侧位置).
screen(,’?’);// 错误只能省略尾部的实参。
对于函数声明来所,将其放在头文件中,并且一个函数只声明一次,但是多次声明也是合法的。但是在给定作用域中一个形参只能被赋予一次默认实参。
函数后续声明只能为前面之前没有哦默认值的形参添加默认实参,该形参右侧所有形参必须有默认值。
stirng screen(sz,sz,char =’ ‘);
stirng screen(sz,sz,char =’*’); // 错误:重复声明
stirng screen(sz= 1,sz = 1,char ); // 正确
注意:
- 局部变量不能作为默认实参
- 用作默认实参的名字在函数声明所在的作用域内解析,而这些名字的求值过程发生在函数调用时。
int a = 80;
char def =’ ‘;
int ht();
string screen(int = ht(),int= wd,char = def);
screen(); // 调用screen(ht(),80,’ ');
void f2()
{
def = ‘’; // 改变默认实参的值
int wd = 100; // 隐藏了外层定义wd,但是没有改变默认值
screen(); // // 调用screen(ht(),80,’’);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)