为什么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中,可以使用声明的参数类型来确定返回类型,因此以类似的方式使用函数参数并不是没有听说过的:
auto bar( int a ) -> decltype( a );
因此,问题是:为什么上述foo
的声明是不允许的?
一方面,这将要求a
在b
之前求值,但是c++(像C一样)没有定义函数参数的求值顺序。
你仍然可以通过添加重载来获得你想要的效果:
int foo(int a, int b)
{ /* do something */ }
int foo(int a)
{ return foo(a, a); }
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何制作一个将函数作为参数的类方法
- 修改函数中的指针(将另一个指针作为参数传递)
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 构造函数在退出函数时无法初始化一个参数
- 在C++中声明一个函数时,它需要有函数本身的参数吗
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 运算符重载:"operator+"必须采用零个或一个参数
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 如何在另一个函数中使用返回值作为参数?
- 如果模板参数是另一个模板的实例化,则键入特征测试
- 将参数一个接一个地传递,或通过将它们包裹在数组,结构或元组中
- 如何给一个参数一个由其他参数的函数确定的默认值
- C++如何给一个参数一个特定的枚举,它可以是
- 如果我在默认构造函数中放了一个参数,但给了这个参数一个默认值,它还是一个默认构造函数吗
- 为什么在c++中给typename模板参数一个默认值0 ?