假设有一个功能
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中都会成功...任何人都可以告诉我为什么以及如何解决它?
答案 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);
}