为了账号安全,请及时绑定邮箱和手机立即绑定

函数参数默认值

为什么在声明默认值时int i不用赋值呢?而 j 与 k 却一定要呢?

正在回答

4 回答

默认值可声明也可以不声明,但声明默认值的形参都在参数列表的最右面。所以i,j,k都可以不声明默认值也可以都声明默认值。

0 回复 有任何疑惑可以回复我~
#1

qq_夜风无痕_03331555 提问者

非常感谢!
2016-09-02 回复 有任何疑惑可以回复我~

因为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)。

当然也可以不给默认参数,没有任何问题。

0 回复 有任何疑惑可以回复我~

默认值可声明也可以不声明,但声明默认值的形参都在参数列表的最右面。所以i,j,k都可以不声明默认值也可以都声明默认值。



0 回复 有任何疑惑可以回复我~
#1

qq_夜风无痕_03331555 提问者

恩恩,我知道了,谢谢
2016-05-13 回复 有任何疑惑可以回复我~

好的,谢谢,我知道了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之离港篇
  • 参与学习       122700    人
  • 解答问题       474    个

C++扫清通往面向对象的最后一道障碍,将所有知识点融会贯通

进入课程

函数参数默认值

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信