Item 10: 대입 연산자는 *this의 참조자를 반환하게 하자

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

int x, y, z;
x = y = z = 15; // 대입이 사슬처럼 이어진다.

대입 연산이 가진 또 하나의 재밌는 특성은 바로 우측 연관 연산이라는 점이다. 위의 대입 연산 사슬은 다음과 같이 분석된다.

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

즉 위 코드는 15가 z에 대입되고, 그 대입 연산 결과가 y에 대입되고, 그 대입 연산 결과가 x에 대입된다.

이렇게 대입 연산이 사슬처럼 엮이려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있을 것이다. 이런 구현은 일종의 관례인데, 나름대로 만드는 클래스에 대입 연산자가 혹시 들어간다면 이 관례를 따르는 것이 좋다.

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

“좌변 객체의 참조자를 반환하게 만들자”라는 규약은 위에서 보신 단순 대입형 연산자 말고도 모든 형태의 대입 연산자에서 지켜야 한다.

정리

  • 대입 연산자는 *this의 참조자를 반환하게 하자.

태그: ,

카테고리:

업데이트:

댓글남기기