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의 참조라르 반환하도록 만드세요.