具体参考原书P211开始
目录
定义
某些函数有这样一种形参,在函数的多次调用中它们都被赋予相同的值,此时,我们把这个反复出现的值称为函数的默认实参。
举个栗子:
typedef string::size_type sz;
string screen(sz ht=24,sz wid=80,char backgrnd=' ');
需要注意的是,一旦某个形参被赋予了默认值,它后面的形参都必须有默认值。
使用默认实参调用函数
如果我们要使用默认实参,只要在调用函数的时候省略该实参就行了。
例如:
string window;
window=screen(66);
函数调用实参按照位置解析,默认实参负责填补调用缺少的尾部实参,例如,我们要覆盖backgrnd的默认值,我们必须为ht和wid提供实参。
默认实参声明
对于函数的声明,通常的习惯是将其放在头文件中,并且每个函数只声明一次,但是多次声明同一个函数也是合法的。不过有一点需要注意,在给定的作用域中一个形参只能被赋予一次默认形参,举个栗子:
//前两个形参没有默认参数
string screen(sz,sz,char=' ');
//不能修改一个已经存在的默认值
string screen(sz,sz,char='*');
//但是可以添加默认实参
string screen(sz=24,sz=80,char);
默认实参初始值
局部变量不能作为默认实参。除此之外,只要表达式的类型能转换成形参所需的类型,该表达式就能作为默认实参:栗子在P212P21