赞
踩
对于C++中函数参数的默认值:
注意: 参数的默认值必须在函数声明中指定,不能在定义中指定,否则编译报错。
问题:函数定义中是否可以出现参数的默认值?当函数声明和定义中的默认值不同时是否会发生错误?
如上直接编译错误。
实例分析:默认参数值初探
#include <stdio.h> int mul(int x = 0); int main(int argc, char *argv[]) { printf("%d\n", mul()); printf("%d\n", mul(-1)); printf("%d\n", mul(2)); return 0; } int mul(int x) { return x * x; } /* 第一种情况:当声明和定义的默认值不同时 error: default argument given for parameter 1 of ‘void fun(int)’ error: after previous specification in ‘void fun(int)’ void fun(int x = 555); */ /* 第二种情况:当声明中无默认值,而定义中有默认值 此时调用函数必须按相应参数进行传参,否则会报错。并且定义时的默认值并不会起作用,这是种没有意义的做法,虽然编译通过了。 */ /* 第三种情况:声明和定义时均给出了默认值,则直接编译错误。 */
函数默认参数的规则:
编程实验:默认参数的错误示例
#include <stdio.h> int add(int x, int y = 0, int z = 0); int main(int argc, char *argv[]) { printf("%d\n", add(1)); printf("%d\n", add(1, 2)); printf("%d\n", add(1, 2, 3)); return 0; } int add(int x, int y, int z) { return x + y + z; } /* 不正确声明 default argument missing for parameter 2 of ‘void fun(int, int, int)’ void fun(int x = 555, int y, int z = 12); */
函数占位参数:
主要意义如下:
问题:下面的两种声明方式等价吗?
void fun(); <-> void fun(void);
(C语言中不等价,不写void意味着接收任意的参数,写void意味着不接收任何参数;C++中等价,都意味着不接收任何参数)
编程实验:占位参数与默认参数值
#include <stdio.h> int func(int x, int = 0); int main(int argc, char *argv[]) { printf("%d\n", func(1)); printf("%d\n", func(2, 3)); return 0; } int func(int x, int) { return x; }
示例代码:占位符与默认参数结合起来使用
#include<stdio.h> void fun(int = 0, int = 0); int main(void) { fun(1,2); fun(); return 0; } void fun(int, int) { }
参考资料:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。