- 대입 연산자는 *this의 참조자를 반환하도록 만들어라
대입 연산자는 *this의 참조자를 반환
C++의 대입 연산은 여러 개가 사슬처럼 엮일 수 있다.
int x, y, z;
x = y = z = 15; // 사슬처럼 이어짐
대입 연산이 가진 특성 중 하나는 우측 연관 연산이라는 점이다.
즉, 위의 대입 연산 사슬은 다음과 같이 분석된다.
x = (y = (z = 15));
15가 z에 대입되고, 그 대입 연산의 결과가 y에 대입된 후, y에 대한 대입 연산의 결과가 x에 대입된다.
이렇게 대입 연산이 사슬처럼 엮이려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있을 것이다.
이런 구현은 관례인데, 클래스의 대입 연산자를 구현할 때는 이 점을 지켜주는 것이 좋다.
class Widget {
public:
...
Widget& operator=(const Widget& rhs)
{
...
return *this; // 좌변 객체(참조자)를 반환
}
...
};
좌변 객체의 참조자를 반환하게 만드는 규약은 단순 대입형 연산자 말고도 모든 형태의 대입 연산자에서 지켜야 한다.
class Widget {
public:
...
Widget& operator+=(const Widget& rhs) // +=, -=, *= 등
{
...
return *this;
}
Widget& operator=(int rhs) // 대입 연산자의 매개변수가 일반적이지 않아도 적용
{
...
return *this;
}
...
};
이 관례는 모든 기본제공 타입들이 따르고 있을 뿐만 아니라 표준 라이브러리에 속한 모든 타입에서도 따르고 있다.