为什么 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); }
这是
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); }