为什么 C++ 不允许参数是默认参数?
Why does C++ not allow a parameter to be a default argument?
void g(int n, decltype(n) = 0); // ok
void f(int n, int = n); // error : default argument references parameter 'n'
int main()
{
f(1); // want it to be same as f(1, 1);
}
为什么 C++ 不允许参数成为默认参数?
这是什么道理?
该限制的一个经常被引用的潜在理由如下:允许参数作为默认参数需要至少对参数评估施加部分排序。必须首先评估在其他参数中用作默认参数的参数。
与此同时,C++ 继续坚持原来的参数求值方法:参数按 未指定 顺序求值。
同样的推理可以用来解释为什么不能在成员函数的默认参数中引用 class 成员:这会对隐藏参数 this
的评估施加一些顺序要求。
void g(int n, decltype(n) = 0); // ok
void f(int n, int = n); // error : default argument references parameter 'n'
int main()
{
f(1); // want it to be same as f(1, 1);
}
为什么 C++ 不允许参数成为默认参数?
这是什么道理?
该限制的一个经常被引用的潜在理由如下:允许参数作为默认参数需要至少对参数评估施加部分排序。必须首先评估在其他参数中用作默认参数的参数。
与此同时,C++ 继续坚持原来的参数求值方法:参数按 未指定 顺序求值。
同样的推理可以用来解释为什么不能在成员函数的默认参数中引用 class 成员:这会对隐藏参数 this
的评估施加一些顺序要求。