결론부터 말하자면 일종의 관례(Convention)에 해당한다.
아래의 코드가 자연스럽다고 느낀다면 이 관례를 지키는 것이 옳다.
int x, y, z;
x = y = z = 15; // x,y,z 모두 15 대입
x = (y = (z = 15)); // 위의 내용은 사실 이것.
위의 코드처럼 z 에 15 가 먼저 대입되고, 그 결과 ( 갱신된 z) 가 다시 y에 대입 되고,
마찬가지로 다시 그 결과(갱신된 y)가 x에 대입 된다.
이처럼 대입 연산자는 기본적으로 우측 연관(right-associative) 특성을 가지며 좌변 객체에 대한 참조자를 반환한다.
class Widget {
public:
//...
Widget& operator=(const Widget& rhs)
{
// ... some process
return *this; // = 기호를 기준으로 좌변 인자를 반환
}
};
그렇기 때문에 위와 같이 class 내부에서 대입 연산자를 오버로딩 한다면 이러한 관례를 지키는 것이 좋다.
물론 관례이기 때문에 지키지 않아도 에러가 발생하진 않는다.
하지만 C++ 기본 제공 데이터 타입, 모든 표준 라이브러리 및 거기에 속한 모든 타입 ( string, vector... ) 전부
이러한 관례를 따르고 있기 때문에 굳이 이것을 거스를 이유가 없다.
항목 12) 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2021.12.05 |
---|---|
항목 11) operator= 에서 자기 대입 상황에 대한 처리를 반드시 하자 (0) | 2021.12.05 |
항목 9) 객체 생성 및 소멸 중에 가상 함수 호출 (0) | 2021.12.05 |
항목 8) 소멸자에서의 예외 발생 (0) | 2021.12.05 |
항목 7) 가상 소멸자에 대해서 (0) | 2021.12.05 |
댓글 영역