상세 컨텐츠

본문 제목

항목 10) 대입 연산자는 *this의 참조자 반환을 지향하자

C++/Effective C++

by DeaKyungLee 2021. 12. 5. 13:55

본문

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

 

결론부터 말하자면 일종의 관례(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... ) 전부

이러한 관례를 따르고 있기 때문에 굳이 이것을 거스를 이유가 없다.

 

Things to Must Remember

  • 대입 연산자는 반드시 *this의 참조자를 반환하도록 구현하자.

관련글 더보기

댓글 영역