2012-10-27 78 views
0

沒那麼假設有一個函數默認參數在linux

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中成功,如果我刪除第二個默認參數是非常量...任何人都可以告訴我爲什麼以及如何解決它?

+0

這是沒有意義的具有非const引用到默認參數。 –

+0

它適用於MSVC,因爲MS C++編譯器中的非標準「擴展」允許將非常量引用綁定到臨時對象。 –

+0

@MuriloVasconcelos大多數情況下,調用函數的人並不真正關心爭論2的價值......所以這就是爲什麼我這樣做......您有沒有更好的解決方案? – yvetterowe

回答

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