c++默认实参值使用另一个形参的值
C++ default argument value using the value of another parameter
我知道一个参数的默认参数值不能是另一个参数的值。例如
void foo( int a, int b = a );
显然b的默认值不是编译时常数,但在我看来,编译器可以生成代码来完成此操作。
我肯定有一个很好的理由不允许这样,我想知道它是什么?
这是因为您无法保证参数的求值顺序。
Iso标准第8.3.6节明确规定了原因:
函数参数的求值顺序未指定。因此,函数的参数不能在默认情况下使用参数,即使它们没有被求值。函数的参数在默认参数之前声明的是在作用域中并且可以隐藏的命名空间和类成员名。
但是,如果在某些情况下可以选择函数重载来获得所需的结果:
void foo(int a, int b);
void foo(int a);
void foo(int a, int b) {
cout << "foo with 2 arguments" << a << "," << b<<endl;
}
void foo(int a) {
cout << "wrapper foo with 1 argument =>";
foo(a, a);
}
标准没有强制要求a
必须在b
之前初始化。因此,它是未定义的行为。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用std::transform将一个范围的元素添加到另一个范围中
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 正在获取另一个函数作用域中的参数值
- 哪个模板形参在boost::shared_ptr构造函数中使用一个原始指针
- 传递boost::函数,该函数接受一个模板实参作为默认为NULL的形参
- 如何将const形参从一个成员函数传递到另一个成员函数
- c++ 03:是否有一种方法可以使一个类型每次被包含在模板形参中时都会编译成不同的类型?
- 定义一个以std::数组为形参的函数
- c++形参是一个指向常量对象的指针,但不返回更新后的对象
- 模板形参的模糊模板重载是一个容器
- c++默认实参值使用另一个形参的值
- 从另一个参数的值设置默认参数值
- 不能在模板专门化定义中将一个类的成员类型定义用作模板形参
- 使用c++模板形参作为另一个模板的实参