성공할 게임개발자

[Effective c++] 10. 대입 연산자는 *this의 참조자를 반환하게 하자 본문

C++

[Effective c++] 10. 대입 연산자는 *this의 참조자를 반환하게 하자

fn000 2025. 5. 26. 18:03

대입연산은 우측 연관 연산이다.

int x, y, z;

x = y = z = 15; //대입이 사슬처럼 이어짐

// x = (y = (z = 15));

위의 코드를 풀어 보면, 15가 z에 대입되고 대입 연산의 결과(갱신된 z)가 y에 대입된다. 또 y에 대한 대입 연산의 결과(갱신된 y)가 x에 대입되는 것이다.

 

대입연산자가 좌변 인자에 대한 참조자를 반환하도록 구현된건 관례(convention)다.

 

class Widget{
	public:
    ...
    Widget& operator=(const Widget& rhs)  //반환 타입은 현재의 클래스에 대한 참조자
    {
    	...
        return *this;	//좌변 객체의 레퍼런스를 반환
    }
    ...
}

 

좌변 객체의 참조자를 반환하게 만들자 라는 규약은 위에서 본 단순 대입형 연산자(=) 말고도 모든 형태의 대입 연산자에서 지켜져야한다. (+=, -=, *= 등에도 동일한 규약)

 

 

관례라서 무조건적인건 아니지만, 모든 기본제공 타입들 뿐만아니라 표준라이브러리에 속한(string, vector complex, tr1::shared_ptr)도 이러한 관례를 따르고 있다.

 

중요포인트!

대입 연산자는 *this의 참조자를 반환하도록 만들자