Signature

연산자 시그니처는 의미에서 고른다

같은 operator 문법이라도 원본을 바꾸는지, 새 값을 만드는지, 실패 없이 이동 가능한지에 따라 const, 반환 타입, noexcept가 달라진다.

읽기 전용

operator+, operator==

현재 객체를 바꾸지 않으므로 멤버 함수 끝에 const를 붙이는 쪽이 자연스럽다.

상태 변경

operator+=, operator=

왼쪽 객체가 바뀌고 연쇄 사용을 위해 보통 자기 자신 참조를 반환한다.

증감

++obj / obj++

전위는 바뀐 자신을 참조로, 후위는 이전 값을 보존한 복사본으로 돌려준다.

자원 이동

operator=(T&&)

이동 대입이 예외 없이 끝날 수 있으면 noexcept가 컨테이너 최적화에 도움을 준다.

연산자 시그니처 한계

다형성이 필요한 타입을 값으로 받으면 객체 슬라이싱이 생길 수 있으므로, 연산자 인자는 기본적으로 const T&에서 시작해 필요할 때만 바꾼다.