Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

로또

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

책/Effective C++

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

아롱로또 2023. 11. 8. 01:02

다루는 내용

대입 연산자는 *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의 참조자를 반환하도록 만들자.