연산자 계약

연산자 오버로딩은 기대 의미를 보존해야 한다

연산자 문법을 예쁘게 만드는 것보다 기존 C++ 사용자가 예상하는 값 의미, 비용, 예외 규칙을 지키는지가 중요합니다.

meaning

의미 일관성

덧셈, 비교, 대입은 일반 타입에서 기대하는 방향과 결과를 따라야 합니다.

pair

짝 맞추기

==와 !=, <와 >, +=와 +처럼 함께 이해되는 연산자를 같이 설계합니다.

const

변경 여부

읽기 연산은 const 객체에서도 동작해야 하며 불필요하게 상태를 바꾸지 않습니다.

cost

비용 노출

큰 복사, 임시 객체, 예외 가능성이 문법 뒤에 숨지 않는지 확인합니다.

멤버 선택

왼쪽 피연산자가 현재 타입이면 멤버 함수가 자연스럽습니다.

비멤버 선택

대칭 변환이나 stream 연산자는 비멤버 또는 friend를 검토합니다.

오버로딩된 연산자는 짧게 보이지만, 사용자는 그만큼 더 강하게 기존 의미를 기대합니다.