【发布时间】:2015-01-07 06:17:08
【问题描述】:
为什么下面的代码格式正确:
void foo(int i, int j = 56);
void foo(int i = 42, int j);
int main(){ }
但是下面
void foo(int i = 42, int j);
void foo(int i, int j = 56);
int main(){ }
格式不正确。我尝试在N4296::8.3.6 [dcl.fct.default] 中查找,发现如下示例:
class C
{
void f(int i = 3);
void g(int i, int j = 99);
};
void C::f(int i = 3) { } //error
void C::g(int i = 88, int j) { // C::g can be called with no argument
}
但是 clang 似乎不是这样的。
struct A
{
void foo(int i = 42, int j);
};
void A::foo(int i, int j = 56){ }; //error
int main(){ }
那么,这是一个实施问题吗?从形式上讲,所有这些例子都应该是可以接受的,不是吗?
【问题讨论】:
-
默认参数应该按照标准从右到左在函数中声明...
标签: c++ function default-arguments