假设有一个函数

void fun(const MyStructure& argu1 = MyStructure(), MyStructure& argu2 = Mystructure())

argu2不是常量,因为我想在函数中修改它的值。
要调用函数:
MyStructure a;
MyStructure b;
fun(a,b);

构建在windows中成功,但在Linux中失败,错误是
default argument for parameter of type 'MyStructure&' has type 'MyStructure'

但是,如果我删除第二个默认参数,它是非常量的,那么构建在windows和linux中都会成功。。。有人能告诉我为什么和怎么解决吗?

最佳答案

可以使用重载手动处理可选的第二个非常量引用参数:

void fun( MyStruct const& arg1, MyStruct& arg2)
{
    // do the real work
}

void fun( MyStruct const& arg1 = MyStruct())
{
    MyStruct arg2;  // a dummy argument that can be changed, but we'll
                    //  throw those changes away
    fun( arg1, arg2);
}

09-27 17:46