로또
10. 대입 연산자는 *this의 참조자를 반환하게 하자. 본문
다루는 내용
대입 연산자는 *this의 참조자를 반환하도록 만들자.
대입 연산자에서 참조자의 반환
C++의 대입 연산자는 다음과 같이 여러 개가 사슬처럼 엮일 수 있는 성질을 갖고 있다.
int x, y, z;
x = y = z = 15;
대입 연산자는 우측 연관(right-associative) 연산이다. 따라서 위 코드는 다음과 같이 분석된다.
x = (y = (z = 15));
이렇게 대입 연산이 이루어지려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현해야 할 것이다.
이러한 구현은 관례(convention)로, 클래스에 대입 연산자가 들어간다면 다음과 같이 해당 관례를 지키는 것이 좋다.
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*=(const Widget& rhs){
...
return *this;
}
}
관례를 따르지 않아도 별다른 문제는 발생하지 않지만 이러한 관례는 모든 기본제공 타입과 표준 라이브러리에 속한 모든 타입에서도 따르고 있으므로 특별한 사유가 없다면 따르도록 하자.
이것만은 잊지 말자!
대입 연산자는 *this의 참조자를 반환하도록 만들자.
'책 > Effective C++' 카테고리의 다른 글
| 12. 객체의 모든 부분을 빠짐없이 복사하자. (0) | 2023.11.08 |
|---|---|
| 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자. (0) | 2023.11.08 |
| 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자. (0) | 2023.11.07 |
| 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자. (0) | 2023.11.06 |
| 7. 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. (0) | 2023.11.04 |