[Effective C++] Item 10: 대입 연산자는 *this의 참조자를 반환하게 하자
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의 참조자를 반환하게 하자.
댓글남기기