C++ primer chap7
1 缺省实参(在声明中指定)
函数可以用参数表中的初始化语法为一个或多个参数指定缺省实参 例如 假设一个函
数创建并初始化一个二维字符数组以便模拟终端显示器 则我们可以为屏幕的高 宽和背景
字符提供缺省实参
char *screenInit( int height = 24, int width = 80,
char background = ' ' );
调用包含缺省实参的函数时 我们可以 也可以不 为该参数提供实参 如果提供了实
参 则它将覆盖缺省的实参值 否则 函数将使用缺省实参值 下面的screenInit()调用都是
正确的
char *cursor;
// 等价于 screenInit(24,80, ' ')
cursor = screenInit();
// 等价于 screenInit(66, 88, ' ')
cursor = screenInit(66);
// 等价于 screenInit(66, 256, ' ')
cursor = screenInit(66, 256);
cursor = screenInit(66, 256, '#');
函数调用的实参按位置解析 缺省实参只能用来替换函数调用缺少的尾部 tailing 实
参 例如 我们不可能为background 提供字符值作为实参而不为height 和width 提供实参
// 等价于 screenInit('<<', 80, ' ')
cursor = screenInit('<<");
// 错误, 不等价于 screenInit(24,80,'<<')
cursor = screenInit( , , '<<');
2 引用在重载运算符时作为形参比较方便,另外,如果数组参数用引用作为形参,那么会检查维数。
3 函数参数的类型不能是函数类型 函数类型的参数将被自动转换成该函数类型的指针 。
4 指向C 函数的指针与指向C++函数的指针类型不同 记住 对于函数指针的初始化或者
赋值 只有当被赋值的指针类型与赋值操作符右边的指针或函数完全匹配时 初始化或者赋
值才是合法的 因此 指向C 函数的指针不能用指向C++函数的指针初始化或赋值 反之亦
然 如果没有这样做 就会产生编译错误 例如
void (*pf1)(int);
extern "C" void (*pf2)(int);
int main() {
pf1 = pf2; // 错误: pf1 和 pf2 类型不同
// ...
}