기호 의미 확인
수학적 또는 표준 라이브러리 관례와 맞지 않는 연산자는 이름 있는 함수가 낫다.
operator+처럼 익숙한 기호를 쓰면 호출자는 기존 의미를 기대한다. 대칭성, 부작용, 변환 규칙이 그 기대와 맞아야 읽기 쉬운 코드가 된다.
수학적 또는 표준 라이브러리 관례와 맞지 않는 연산자는 이름 있는 함수가 낫다.
왼쪽 피연산자가 내 타입이어야 하는 연산은 멤버로, 대칭 변환이 필요하면 비멤버를 고려한다.
+=를 먼저 구현하고 +는 복사 후 +=를 호출하면 의미가 맞기 쉽다.
class Vec2 {
public:
Vec2& operator+=(const Vec2& rhs) { x += rhs.x; y += rhs.y; return *this; }
friend Vec2 operator+(Vec2 lhs, const Vec2& rhs) { return lhs += rhs; }
private:
int x = 0, y = 0;
};