为什么 C++ 不允许函数参数用于后一个参数的默认值?

Why C++ does not allow function parameters used for default values latter parameters?

这是 的后续。 OP 问题中的代码对我来说看起来非常合理且明确。为什么C++不允许使用前一个参数来定义后一个参数的默认值,像这样:

int foo( int a, int b = a );

此外,至少在 C++11 中声明的参数类型可用于确定 return 类型,因此以类似方式使用函数参数并非闻所未闻:

auto bar( int a ) -> decltype( a );

因此问题:为什么不允许上述foo声明的原因是什么?

一方面,这需要在 b 之前计算 a,但 C++(如 C)没有定义函数参数的计算顺序。

你仍然可以通过添加重载来获得你想要的效果:

int foo(int a, int b)
{ /* do something */ }

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