본문 바로가기

Effective C++ 정리

10. 대입 연산자는 *this의 참조자를 리턴한다

대입 연산자는 좌변 객체의 참조자를 반환하게 만들자 

대입 연산은 우측에서 좌측으로 연쇄적으로 대입된다는 특성이 있습니다. 

 

int x, y, z;

x = y = z = 15;

 

이를 보았을 때, 대입 연산이 z = 15, y =15, x = 15 이렇게 사슬같이 연쇄적으로 엮이려면

대입 연산자는 좌변에 대한 참조자를 반환하도록 구현되어 있을 것이라고 예상할 수 있습니다.

그래서 클래스 타입의 대입 연산자를 정의할 때, 이러한 관례를 지키는 것이 좋다고 합니다.

 

class MyFunc
{
public:
	...

	// 반환 타입은 현재 클래스에 대한 참조자이다.
	MyFunc& operator = (const MyFunc& rhs)
	{
		...

		// 좌변 객체(의 참조자)를 반환한다.
		return *this;
	}

	MyFunc& operator += (const MyFunc& rhs)
	{
		...
		return *this;
	}

	MyFunc& operator *= (const MyFunc& rhs)
	{
		...
		return *this;
	}

	...
};

 

대입과 관련된 연산자 오버로딩은 *this 리턴으로 보셔도 무방할 것 같습니다.