结构引用构建的默认参数在linux中失败

时间:2012-10-27 03:18:39

标签: c++ linux default-value

假设有一个功能

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

argu2不是const,因为我想在函数中修改它的值。

调用该函数:

MyStructure a; 
MyStructure b; 
fun(a,b);

构建在Windows中成功但在Linux中失败并且错误是

default argument for parameter of type 'MyStructure&' has type 'MyStructure'

但是如果我删除了非const的第二个默认参数,那么构建在windows和linux中都会成功...任何人都可以告诉我为什么以及如何解决它?

1 个答案:

答案 0 :(得分:1)

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

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);
}