关于函数参数和默认初始化的规则

时间:2014-02-04 17:24:28

标签: c++

int foo(int arg1, int arg2 = arg1)
{
    std::cout << arg2;
}

为什么c ++标准不允许这个默认参数初始化王?

1 个答案:

答案 0 :(得分:4)

不同寻常的是,这是标准确实提供理由的一个案例(虽然不是特别引人注目的):

  

C ++ 11 8.3.6 / 9未指定函数参数的评估顺序。因此,函数的参数不应在默认参数中使用,即使它们未被评估。

这不是一个特别艰巨的限制,因为你可以通过重载达到同样的效果:

int foo(arg1) {return foo(arg1, arg1);}