假设有一个函数
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);
}