浏览 1485 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-30
一般情况,默认参数值在函数声明时声明的。因为在实用的程序中,函数声明总是与函数定义分离的,而在又有声明又有定义时,默认参数值自然只能置身于声明中。 以下例子是一般情况:
void point(int = 3, int = 4); //声明 默认参数值,同时注意可以形参省略 void point(int x, int y) { //定义 不允许再给出默认值 cout<<x<<endl; cout<<y<<endl; }
函数参数默认值只能从后往前设置,因为在进行实参与形参的匹配时是按从前到后的解析,如果默认参数是从后往前设置,那么有可能后面的参数没有设置默认值,在传实参的时候少传了没有默认值的实参,导致栈空间的变量没有被初始化,进而发生错误,例如:
void func(int a = 1, int b, int c, int d = 3); //错误的声明 func(2,3);//传入参数 a = 2? b = 2? c = 3?-----确定不了 相对的,默认实参只能从后往前逐个替换(即当实参从前往后替换完后),例如:
void func(int a, int b = 2, int c = 3, int d = 4); //正确声明 func(10, 15, 20, 30); //全部替换 func(); //错,a没有默认参数 func(12, 12); //替换了a和b func(2, 15, ,20); //错,当从后替换默认参数时发现最后一个已经有了实参,c不能被替换,因为还有无默认参数的没被实参替换完的情况 默认参数值不能重复声明(这个很好理解了),例如:
void func(int a = 1); void func(int a = 2); //错 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |