관리 메뉴

기억을 위한 기록들

[CPP-effective] 2-5 대입 연산자는 *this의 참조자를 반환하게 하도록 본문

C & CPP/Effective C++

[CPP-effective] 2-5 대입 연산자는 *this의 참조자를 반환하게 하도록

에드윈H 2021. 3. 22. 17:16

C++의 대입연산은 재미있는 성질이 있다.

int x,y,z;

x=y=z=15; //사실처럼 연결된다.

 

또 하나의 재미있는 특성으로 우측 연관(right-associative)연산 이라는 점이다.

즉, 위의 대입 연산 사슬을 분석하게 되면

x = ( y = ( z = 15));

위와 같이 된다. 이렇게 대입 연삱이 사슬처럼 엮이려면 대입연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있을 것이다. 이런 구현은 일종의 관례로 클래스에서 대입연산자를 만들게 된다면 

 

class Player{

pulbic:
    Player& operator=(const Player& rhs)
    {
    //..내용
       return *this;
    }
};

 

"좌변 객체의 참조자를 반환하게 만들자"라는 규악은 위에서 단순 대입형 말고도 모든 형태의 대입연산자에서 지켜져야 한다.

 

class Player{

pulbic:
    Player& operator+(const Player& rhs)// +=,-=,*= 등 연산자에도 
    {
    //..내용
       return *this;
    }
    
    Player& operator=(int rhs) //대입연산자의 매개변수 타입이 일반적이지 않더라도
    {
    //..내용
       return *this;
    }
};

 

관례로 위와 같은 방식을 사용하지 않아도 컴파일이 되긴한다. 하지만 이 관례는 모든 기본 제공 타입들이 따르고 있을뿐만 아니라, 표준 라이브러리에 속한 모든 타입(string, vector 등)에서도 따르고 있다는 점은 무시하지 못한다.

 

정리

* 대입연산자는 *this의 참조라르 반환하도록 만드세요.