[모던C++입문] 2.7 연산자 오버로딩 디자인

짜장범벅·2022년 6월 6일
0

모던CPP입문

목록 보기
7/11

2.7 연산자 오버로딩 디자인

C++에서는 대부분의 연산자를 오버로딩 할 수 있지만 일부 연산자는 특정 목적으로만 사용되어야 한다. 예를 들면 주소 연산자 &를 오버로딩하려면 마땅한 이유가 필요하다.

2.7.1 일관성있게 디자인하라

연산자 오버로딩이 표준 타입의 행동에 가까울수록 다른 사람들이 더 신뢰할 수 있다.

예를 들어, =, +, +=을 사용자 정의한 경우 a=a+ba+=b는 같은 효과를 가져야 한다.

항의 개수도 가변적인 항을 취하기도 하지만, 일반적으로 가변적인 항을 허용하는 유일한 연산자는 응용 연산자인 operator()이다.

2.7.2 우선순위를 존중하라

예를 들어 행렬 A, B에 대해 아래처럼 연산자를 정의했다고 하자

A = B^2;

직관적으로 AB의 제곱이며, ^연산자는 비트 연산자이지만 행렬에 대해서는 비트 연산이 필요없으므로 괜찮아 보인다. 하지만 아래의 경우를 생각해보자

A = B^2 + C;

여기서 C++의 연산자 우선순위는 +^보다 높기 때문에 컴파일러는 아래처럼 이해한다.

A = B^(2+C);

따라서 연산자의 의미 및 의도한 우선순위가 C++ 연산자의 우선 순위와 일치해야 한다.

2.7.3 멤버 함수 또는 자유 함수

이진 연산자 오버로딩 함수를 class의 멤버로 선언할지, 자유 함수(inline function)으로 선언할지는 암시적 변환을 구현해 자유 함수로 선언해야 한다.

profile
큰일날 사람

0개의 댓글