【发布时间】:2013-03-06 10:53:33
【问题描述】:
所以这是不允许的
void foo (int a, int b = 10, int c);
但是为什么呢?为什么不允许这样称呼它?两个连续的逗号表示“使用默认参数”。
foo (20,,30);
除了“这不允许,因为这是不允许的”和“这是不允许的,因为没有人把它提交给委员会”之外,还有什么真正的理由吗?
编辑: 好的,这个呢
void bar (int a, int b, int c = 1,
int d = 2, int e = 3,
int f = 4, int g = 5, int h = 6);
有效的声明,但是我想跳过除h 之外的所有默认参数。
能够做到这一点不是很好吗:
bar (20, 30, , , , , , 10);
【问题讨论】:
-
我会说
foo (20,,30);是个坏主意,因为通过阅读代码,我无法判断默认参数的值是什么或它的含义。但是,我知道它就在那里,这让我很烦恼。当您最后遗漏了默认参数时,该函数仍应读取正确。例如,std::sort(begin, end)是完全可以理解的,std::sort(begin, end, std::greater)也是如此。如果比较函数是第二个参数,那么如果不阅读文档,这里缺少的参数会让我感到困惑:std::sort(begin,,end); -
@sftrabbit "...我不知道默认参数的值是什么":嗯,与默认参数的可用语法相同...
-
@aleguna:你认为这带来了什么好处值得增加复杂性和模糊性?
-
命名参数应该来救援
-
不知道为什么它被“非建设性”关闭。 D&E有一个明确的原因。应改为“重复”关闭,请参阅stackoverflow.com/questions/1123725/…
标签: c++