센로그

[EC++] 10. 대입 연산자는 *this의 참조자를 반환하게 하자 본문

Effective/Effective C++

[EC++] 10. 대입 연산자는 *this의 참조자를 반환하게 하자

seeyoun 2024. 11. 17. 17:29

C++ 대입 연산은 여러 개가 사슬처럼 엮일 수 있다.

int x, y, z;
x = y = z = 15;
  • z에 15가 대입되고, 갱신된 z가 y에 대입되고, 갱신된 y가 x에 대입되는 형태이다.

 


이것이 가능한 이유는?

  • 대입 연산자가 좌변 인자(자기 자신)에 대한 참조자를 반환하도록 구현되어 있기 때문이다.
  • 이는 일종의 관례이며, 우리가 커스텀 클래스를 만들 때도 대입 연산자는 이런 식으로 구현하는 것이 좋다.
class Widget {
public:
    ...
    Widget& operator= (const Widget& rhs) {
    	...
        return *this;
    }
    
    Widget& operator+= (const Widget& rhs) {
    	...
        return *this;
    }
};
  • = 뿐만 아니라 +=, -=, *= 등에도 동일한 규약이 적용된다.
Comments