Effective C++/Chapter 2: 생성자, 소멸자 및 대입 연산자

[Effective C++] 항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자

yeoul0714 2025. 4. 23. 04:35

1. 개요


C++의 대입 연산자는 여러개가 동시에 엮일 수 있습니다.

 

무슨말인가 하면 

 

우리는 일반적으로 대입연산자를 a=3; 이런식으로 씁니다.

 

그러나 a=b=c=3; 이런식으로 쓰는것도 가능하다는 말입니다.

 

우측 부터 연산이 진행되는 연산자입니다.

 

위의 연산을 괄호를 쳐서 본다면 이렇게 됩니다.

 

a=(b=(c=3)); 

 

c에 3대입되고 그 결과가 b에 대입되고 다시 그 결과가 a에 대입됩니다.

 

이러한 연산이 가능하려면 연산자가 좌변에 대한 참조자를 반환하도록 구현되어 있어야 합니다.


2. 다른것들은?


좌변 객체의 참조자를 반환하자는 규칙은 = 뿐만 아니라 다른 경우에도 지켜져야 합니다.

 

예를들면 += -= *= 등과같은 연산고 *this를 반환하게 하는것이 관례입니다.

 

이 관례는 모든 기본제공 타입들이 따르고 있습니다.

 

또한 string, vector, complex, shared_ptr등 모든 곳에서 따르고 있습니다.

 

결론은 *this를 꼭 반환하자!

 

이것만은 잊지 말자!

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

 


항목 11

https://yeoul0714.tistory.com/39

 

[Effective C++] 항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자

1. 개요자기대입은 어떤 객체가 자기 자신에게 대입 연산을 실행하는 것을 말합니다. 예를 들면 이런것이죠 Yeoul y; y=y; 문법상 아무 문제가 없는 코드입니다. a[i] = a[j]; i와j가 같아지면 자기대입

yeoul0714.tistory.com