더북(TheBook)

더 형식적으로 이야기하자면, 함수 오버로드는 시그니처(Signature)가 서로 달라야 한다. C++에서 시그니처는 다음과 같이 구성되어 있다.

함수 이름

항(Arity)이라고 하는 인자의 개수

(해당 순서대로) 인자의 타입

반대로 리턴 타입이나 인수 이름만 다른 오버로드는 동일한 시그니처를 가지며, (금지된) 재정의로 간주한다.

void f(int x) { }
void f(int y) { }    // 재정의: 인수 이름만 다르다.
long f(int x) { }    // 재정의: 리턴 타입만 다르다.

이름이나 인자의 개수가 다른 함수는 말할 필요도 없이 서로 다른 함수다. 레퍼런스 기호가 있으면 인수 타입이 다른 인수 타입으로 바뀐다(따라서, f(int)f(int&)가 공존할 수 있다). 다음 세 오버로드는 서로 다른 시그니처를 갖는다.

void f(int x) { }
void f(int& x) { }
void f(const int& x) { }
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.