为什么c++不允许函数参数作为默认值使用后一个参数

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

本文关键字:参数 一个 默认值 不允许 c++ 函数 为什么      更新时间:2023-10-16

这是这个问题的后续。OP问题中的代码对我来说是相当合理和明确的。为什么c++不允许使用前一个形参来定义后一个形参的默认值,就像这样:

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

而且,至少在c++ 11中,可以使用声明的参数类型来确定返回类型,因此以类似的方式使用函数参数并不是没有听说过的:

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

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

一方面,这将要求ab之前求值,但是c++(像C一样)没有定义函数参数的求值顺序。

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

int foo(int a, int b)
{ /* do something */ }
int foo(int a)
{ return foo(a, a); }
相关文章: