2016-06-12 120 views
3

返回*thisthis與通過引用返回對象的模板函數有什麼區別? 這兩個選項在VS2013中沒有任何問題編譯;返回參考模板

的代碼是一樣的東西

template <typename T> 
class MyClass 
{ 

public: 
    MyClass(){ } 
    ~MyClass(); 

    MyClass& operator=(const MyClass&); 

}; 

template <typename T> 
MyClass<T>& MyClass<T>::operator=(const MyClass& s_from) 
{ 

    //do some work 
    return *this; 
    //also works 
    //return this 
} 

template <typename T> 
MyClass<T>::~MyClass() 
{ 

} 
+3

'retun this;'不應該編譯。如果有,請製作[mcve]。 – nwp

+0

它編譯。這就是爲什麼我問。 –

+0

當你實例化你的模板並使用operator =時,你會得到錯誤。看到我的回答 – AnatolyS

回答

4

僅用於模板編譯器檢查語法。當你實例化模板,並嘗試複製的對象,你會得到編譯錯誤的回報是:

MyQueue<int> a; 
MyQueue<int> b; 
a = b; /// ops 

或者你可以明確的實例化你的模板(在這種情況下,編譯器生成的所有成員,你看到的所有錯誤)

template class MyQueue<int>; 

因此,返回*這是從成員函數或操作符返回對象的唯一方法。

+0

顯式實例化是我需要的技巧! –

0

thisMyQueue<T>* const類型,而*thisMyQueue<T>,所以return this不應該工作,除非有一個隱式轉換從MyQueue<T>*MyQueue<T>