[Effective C++] 10. 대입 연산자는 *this의 참조자를 반환하게 하자
728x90
반응형
C++의 대입 연산은 여러 개가 사슬처럼 엮일 수 있는 성질을 가지고 있다.
int x, y, z;
x = y = z = 10;
대입 연산이 가진 또 하나의 특성은 우측 연관(right-associative) 연산이라는 점이다.
즉, 위의 대입 연산 사슬은 다음과 같이 우측 z부터 순서대로 대입된다.
x = (y = (z = 10));
대입 연산이 사슬처럼 엮이려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있다.
아래의 예시를 보자.
class Widget
{
public:
Widget& operator+=(const Widget& rhs) // +=, -=, *= 등에도 동일한 규약이 적용된다.
{
return *this; // 좌변 객체(의 참조자)를 반환. 반환 타입은 현재 클래스에 대한 참조자
}
}
이렇게 "좌변 객체의 참조자를 반환하게 만들자"라는 규약은 거의 모든 형태의 대입 연산자(+=, -=, *= 등등..)에서 지켜져야 하며, 이것은 일종의 관례이다.
관례이므로 지키지 않는다고 해서 컴파일이 안되진 않지만 표준 라이브러리와 기본 타입들은 이 관례를 따르고 있으니 지키도록 하자.
요약
- 대입 연산자는 *this의 참조자를 반환하도록 만들자
728x90
반응형
'Books > Effective C++' 카테고리의 다른 글
[Effective C++] 12. 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2022.05.18 |
---|---|
[Effective C++] 11. operator=에서는 자기 대입에 대한 처리가 빠지지 않도록 하자 (0) | 2022.05.18 |
[Effective C++] 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2022.05.14 |
[Effective C++] 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (0) | 2022.05.14 |
[Effective C++] 7. 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (0) | 2022.05.13 |
댓글
이 글 공유하기
다른 글
-
[Effective C++] 12. 객체의 모든 부분을 빠짐없이 복사하자
[Effective C++] 12. 객체의 모든 부분을 빠짐없이 복사하자
2022.05.18 -
[Effective C++] 11. operator=에서는 자기 대입에 대한 처리가 빠지지 않도록 하자
[Effective C++] 11. operator=에서는 자기 대입에 대한 처리가 빠지지 않도록 하자
2022.05.18 -
[Effective C++] 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
[Effective C++] 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
2022.05.14 -
[Effective C++] 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자
[Effective C++] 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자
2022.05.14