728x90
반응형

C++의 대입 연산은 여러 개가 사슬처럼 엮일 수 있는 성질을 가지고 있다.

int x, y, z;
x = y = z = 10;

대입 연산이 가진 또 하나의 특성은 우측 연관(right-associative) 연산이라는 점이다.

즉, 위의 대입 연산 사슬은 다음과 같이 우측 z부터 순서대로 대입된다.

x = (y = (z = 10));

대입 연산이 사슬처럼 엮이려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있다.

아래의 예시를 보자.

 

class Widget
{
public:
	Widget& operator+=(const Widget& rhs) // +=, -=, *= 등에도 동일한 규약이 적용된다.
	{
		return *this; // 좌변 객체(의 참조자)를 반환. 반환 타입은 현재 클래스에 대한 참조자
	}
}

이렇게 "좌변 객체의 참조자를 반환하게 만들자"라는 규약은 거의 모든 형태의 대입 연산자(+=, -=, *= 등등..)에서 지켜져야 하며, 이것은 일종의 관례이다.

관례이므로 지키지 않는다고 해서 컴파일이 안되진 않지만 표준 라이브러리와 기본 타입들은 이 관례를 따르고 있으니 지키도록 하자.

 

요약

  • 대입 연산자는 *this의 참조자를 반환하도록 만들자
728x90
반응형