C++ 定义默认参数时方向从右向左,这句话无法理解。

定义参数不就在各个参数后面加 =……
还需要从右向左对应吗?
不明白,请举个例子

eg
void m(int a,char v,float f=0.0);
void m(int a=0,int v,int f);
假如你要调用第二个方法,请问你怎么调用呢?
如果你想这样m(2,3);
那2编译器只能认为是int a的,3只能认为是int v的,而且这样也不对啊,那int f呢?
所以只有像第一种方法那样,可选参数放在后面,从右往左排列编译器才会识别!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-01
指C++中带默认值的参数必须全部排在()最右侧, 中间不能夹着不带默认参数的参数. 如果允许默认参数写在一般参数的左侧的话, 调用时就会变成这样: func(, , 1, 3, 4, 5)使用默认参数时只能直接空掉几个参数不填, 然而C++并不允许这种写法, 于是只能把默认参数全部定义在最右侧然后连同逗号一起省略
第2个回答  2009-09-07
这句话有问题。 省略参数后面(右面)的参数不许省略,不然乱套了。定义时默认参数后面不能有必须参数了。
第3个回答  2009-09-07
默认参数的意思是,如果在使用该函数时,可以不传递该默认参数,因此,必须把默认参数放在右边,否则,系统怎么知道你要省略的是哪个参数撒?
第4个回答  2016-05-16
假设一个函数头是void show(int a,int b,int c)
1、因为传参时,是按形参列表从左向右赋值的(即先赋给a,再赋给b,最后赋给c)。故如果设默认值的话,应该从最右端开始,才能保证传进来的值能正确对应地赋给所想的参数,也不会覆盖掉预先设好的默认值
2、上例中,如果要定义默认参数,则首先应该定义c的默认参数值,只有在c的默认值定义好的情况下才能继续定义b为默认参数。满足从右向左顺序。例如,void show(int a,int b =1,int c=2)
3、如果不按顺序来,比如定义成了void show(int a,int b=1,int c),首先,vs2010会报错。不过,先假设比较早的版本不报错。
若想让b使用默认值,则在调用函数时无法成功
1)比如,写成show(2,,3),这样写是错误的
2)比如,写成show(2,3),系统肯定会认为这是给a、b传的值。而c没被传值,又没有默认值,因此还是错的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网