2016-06-12 2 views
3

*thisthis을 참조로 개체를 반환하는 템플릿 함수에서 반환하는 것의 차이점은 무엇입니까? 두 옵션 모두 VS2013에서 아무런 문제없이 컴파일됩니다.템플릿을 참조로 돌아 가기

코드는 *this 동안 MyQueue<T>*에서 MyQueue<T>에 대한 암시 적 캐스트가없는 한 그렇게 return this 작동하지해야 MyQueue<T>입니다 유형 MyQueue<T>* const이다

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

템플릿을 인스턴스화하고 연산자 =를 사용하면 오류가 발생합니다. 내 대답을 참조 – AnatolyS

답변

4

서식 파일 컴파일러는 구문을 검사합니다. 당신이 당신의 템플릿을 인스턴스화하고 개체를 복사 할 때, 당신은 반환이에 대한 오류를 컴파일 얻을 :

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

또는 명시 적 인스턴스화는 템플릿 (이 경우 컴파일러는 모든 멤버를 생성하고 모든 오류를 참조) 할 수

template class MyQueue<int>; 

반환 값 * 이것은 멤버 함수 또는 연산자에서 객체에 대한 참조를 반환하는 유일한 방법입니다.

+0

명백한 인스턴스 생성은 내가 필요로하는 속임수입니다! –

0

this 같은 것입니다.