2013-10-07 88 views
0

我已經定義了一個普通的類T:傳遞和返回引用

class T { 
    public: 
    T() { cout << "default constructor " << this << "\n" } 
    T(const & T a) { cout <<"constructor by copy " << this << "\n"} 
    ~T() { cout << "destructor "<< this << "\n"} 
    T & operator=(T & a) { 
     cout << " assignemnt operator :" << this << " = " << &a << endl;} 
}; 

而且有4個功能,其中之一是錯誤的:

T f1(T a){ return a; } 
T f2(T &a){ return a; } 
T &f3(T a){ return a; } 
T &f4(T &a){ return a; } 

有誰知道哪一個是錯的?

+1

順便說一句:在'operator ='中,'T&a'通常是const。 – luiscubal

+0

這是一個糟糕的問題 - 任何編譯器都會給出答案! –

+0

'T(const&T a)'在'T'的類定義中是亂碼。 –

回答

5

f3是錯誤的,因爲它返回的是對本地對象的引用。

複製按值傳遞的參數。它們的副本對於它們傳遞的函數是局部的 - 只要函數返回,它們就會超出範圍。