0

那么假设有一个函数

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'

但是,如果我删除第二个非常量的默认参数,则构建在 Windows 和 linux 中都会成功......有人可以告诉我为什么以及如何解决它吗?

4

1 回答 1

1

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

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);
}
于 2012-10-27T04:18:31.143 回答