2015-05-12 58 views
1

我在DEV C++上運行這個程序,它顯示const的錯誤。但是在Visual Studio中它的工作正常。現在對於複製構造函數是非常重要的?對於複製構造函數來說Const是否重要?

#include<iostream> 
using namespace std; 

class Test 
{ 
    /* Class data members */ 
public: 
    Test(Test &t) { /* Copy data members from t*/} 
    Test()  { /* Initialize data members */ } 
}; 

Test fun() 
{ 
    cout << "fun() Called\n"; 
    Test t; 
    return t; 
} 

int main() 
{ 
    Test t1; 
    Test t2 = fun(); 
    return 0; 
} 
+0

這與複製構造函數無關。 – juanchopanza

+0

@juanchopanza它是'main()'中的第二行使用複製初始化並且無法編譯。 – vsoftco

+0

@vsoftco是的,但問題與複製構造函數無關。我可以提供一個例子,其中在矩陣求逆中出現相同的錯誤。 – juanchopanza

回答

3

拷貝構造函數是傳統聲明爲

Foo(const Foo&); 

,因爲它假設副本不改變其右側的對象(至少一個很好的複印機不應該改變它,對嗎?)

在標準C++中,您不能將臨時參數綁定到非const引用。 Visual Studio使用非標準擴展,這就是代碼編譯的原因,但不應該依賴非標準擴展。

你的拷貝構造函數以const引用rhs並不是絕對必要的,也可以引用它作爲參考。但是在這種情況下,你將無法從右值執行拷貝初始化(基本上是臨時的)。