函数参数默认值
为什么在声明默认值时int i不用赋值呢?而 j 与 k 却一定要呢?
为什么在声明默认值时int i不用赋值呢?而 j 与 k 却一定要呢?
2016-05-10
因为c++在给函数实参时候是从左往右匹配的,假设就像视频里一样,定义了一个函数
int func(int a=1,int b=2,int c=3);
这个时候我在调用这个函数时穿了两个实参过去
int i=0; i=func(7,8);
c++在匹配实参时是无视有没有默认参数,直接从左往右依次匹配的。
所以这时候在函数里,三个形参的实际值就变成了
a=7;b=8;c=3;
然后我们假设定义了以下两种函数:
int func2(int a=1,int b=2,int c); int func3(int a,int b,int c=1);
我们给func2传两个参数,给func3传一个参数。
i=func2(7,8); i=func3(7);
func2就会因为c没有实参而报错。
而func3会因为b没有实参而报错(c这时候用了默认参数,b没有得到任何值,a得到了实参为7)。
当然也可以不给默认参数,没有任何问题。
举报