서적 정리/Effective C++
10.대입 연산자는 *this의 참조자를 반환하게 하자
민돌이2
2021. 12. 10. 23:49
C++의 대입 연산즌 여러 개가 사슬처럼 엮일 수 있는 성질을 갖고 있다.
int x, y, z;
x = y = z = 15;
또한 우측 연관 연산이다. 위의 대입 연산 사슬을 아래와 같이 표현할 수 있다.
x = (y = (z = 15));
15가 z에 대입되고, 그 대입 연산 결과 갱신된 z가 y에 대입된 후, 갱신된 y가 x에 대입되는 것이다.
이렇게 대입 연산이 사슬처럼 엮이려면 대입 연산자의 좌변 인자에 대한 참조자를 반환하도록 구현되어 있어야 한다.
이런 구현은 일종의 관례(convention)인데, 나도 이 관례를 지키는게 좋다.
class Widget
{
public:
Widget& operator=(const Widget& rhs)
{
return (*this); //좌변 객체의 참조자를 반환
}
};
좌변 객체의 참조자를 반환하게 만들자라는 관례는 단순 대입 연산자말고도 모든 형태의 대입 연산자에서 지켜져야 한다.
class Widget
{
public:
Widget& operator=(const Widget& rhs)
{
return (*this); //좌변 객체의 참조자를 반환
}
Widget& operator*=(const Widget& rhs)
{
return (*this); //좌변 객체의 참조자를 반환
}
Widget& operator+=(const Widget& rhs)
{
return (*this); //좌변 객체의 참조자를 반환
}
Widget& operator=(size_t rhs) //매개 변수 타입이 일반적이지 않을 경우에도 동일
{
return (*this); //좌변 객체의 참조자를 반환
}
};
이것만은 잊지말자
대입 연산자는 *this의 참조자를 반환하도록 만들자
728x90