반응형
컴파일에서 함수를 오버로딩하는 과정
함수의 이름은 같은데 매개변수, 리턴타입 등의 특징은 다른 여러개의 함수를 만들 수 있는 기능
자신과 타입이 정확히 일치하는 함수를 찾는다.
정확히 일치하는 타입이 없을 경우, 형변환을 통해서 일치하는 함수를 찾는다.
- char, unsigned char, short는 int로 변환
- unsigned short는 int의 크기에 따라 int 혹은 unsigned int 로 변환된다.
- float은 double로 변환된다.
- enum은 int로 변환된다.
2단계까지도 일치하는 것이 없다면
- 임의의 숫자(numeric) 타입은 다른 숫자 타입으로 변환 (ex float -> int)
- enum도 임의의 숫자 타입으로 변환된다. (ex enum -> double)
- 0은 포인터 타입이나 숫자 타입으로 변환된 0 은 포인터 타입이나 숫자 타입으로 변환된다.
- 포인터는 void 포인터로 변환된다.
유저 정의된 타입 변환으로 일치하는 것을 찾는다.
만약에 컴파일러가 위 과정을 통하더라도 일치하는 함수를 찾을 수 없거나 같은 단계에서 두 개 이상 일치하는
경우에 모호하다(ambiguous)라고 판단해서 오류를 발생하게 된다.
반응형