이런 코드를 본 경험이 있을 것이다.
int x, y, z;
x = y = z = 10;
대입연산자는 right-associative 우측 연관 연산이라는 특성을 가진다.
이는 아래와 같다.
x = (y = (z = 10));
우측 z 부터 순서대로 대입이 진행된다.
보통 이러한 연산자는 참조자를 반환하도록 구현되어 있다. 일종의 관례이다.
class Widget {
public:
…
Widget& operator+=(const Widget& rh)
{
…
return *rh;
}
}
"좌변객체의 참조자는 반환하게 만들자"라는 관례는 단순 대입형 연산자 뿐 아니라, +=, -=, *= 등에도 동일하게 적용한다. 굳이 안따라도 컴파일이 안되진 않는다. 하지만 표준 라이브러리 and 기본 타입이 이 관례를 따르니 지키도록하자.
이것만은 잊지 말자!
- 대입연산자는 *this의 참조자를 반환하도록 만든다.
'책 정리 > Effective C++ 3rd' 카테고리의 다른 글
항목 12. 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2019.12.18 |
---|---|
항목 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2019.12.18 |
항목 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2019.12.17 |
항목 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (0) | 2019.12.17 |
항목 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자 (0) | 2019.12.15 |
댓글