C++ 将其他参数作为默认值的函数参数

C++ 将其他参数作为默认值的函数参数,c++,default-arguments,C++,Default Arguments,我希望函数参数将其他参数的值作为默认值 我的问题是:为什么不允许我这样做 void foo(int a, int b = a) { } 还有别的办法吗 void foo(int a) { foo(a,a); } void foo(int a, int b) { } 使用 根据标准,这是一个错误 从C++11标准: 8.3.6默认参数 每次调用函数时都会计算9个默认参数。未指定函数参数的求值顺序。因此,函数的参数不得用于默认参数, 即使未对其进行评估。在默认参数之前声明的函数的参数

我希望函数参数将其他参数的值作为默认值

我的问题是:为什么不允许我这样做

void foo(int a, int b = a)
{

}
还有别的办法吗

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

void foo(int a, int b)
{

}
使用

根据标准,这是一个错误

从C++11标准:

8.3.6默认参数

每次调用函数时都会计算9个默认参数。未指定函数参数的求值顺序。因此,函数的参数不得用于默认参数, 即使未对其进行评估。在默认参数之前声明的函数的参数在作用域中,可以隐藏命名空间和类成员名称。[示例:

int a;
int f(int a, int b = a);            // error: parameter a
                                    // used as default argument
-[结束示例]

  • 为什么不允许我这么做
  • 由于函数参数的求值顺序未指定,因此不能保证
    b
    将使用作为
    a
    参数传入的值进行初始化

    发件人:

    每次使用调用函数时,都会计算默认参数 没有对应参数的参数。不应使用参数 在默认参数中显示为可能计算的表达式。
    [示例:

    int a;
    int f(int a, int b = a);            // error: parameter a
                                        // used as default argument
    

  • 还有别的办法吗
  • 使用函数重载既简单又好。

    此链接将对您有所帮助
    int a;
    int f(int a, int b = a);            // error: parameter a
                                        // used as default argument