less than 1 minute read

함수 오버로딩 할 때, 아래 단계와 같이 형변환 과정이 일어난다.

  • 1단계
    • 자신과 타입이 정확히 일치하는 함수를 찾는다.
  • 2단계
    • 정확히 일치하는 타입이 없는 경우 아래와 같은 형변환을 통해서 일치하는 함수를 찾는다.
      • Char, unsigned char, short은 int로 변환된다.
      • unsigned short은 int의 크기에 따라 int 혹은 unsigned int로 변환된다.
      • float은 double로 변환된다.
      • Enum은 int로 변환된다.
  • 3단계
    • 위와 같이 변환해도 일치하는 것이 없다면 아래와 같이 좀 더 포괄적인 형변환을 통해 일치하는 함수를 찾는다.
      • 임의의 숫자(numeric) 타입은 다른 숫자 타입으로 변환된다 (예를 들어 float -> int)
      • Enum은 임의의 숫자 타입으로 변환된다. (예를 들어 Enum -> double)
      • 0은 포인터 타입이나 숫자 타입으로 변환된 0은 포인터 타입이나 숫자 타입으로 변환된다.
      • 포인터는 void 포인터로 변환된다.
  • 4단계
    • 유저 정의된 타입 변환으로 일치하는 것을 찾는다.

만약에 컴파일러가 위 과정을 통하더라도 일치하는 함수를 찾을 수 없거나 같은 단계에서 두 개이상이 일치하는 경우에 모호하다(ambigious)라고 판단해서 오류를 발생시킨다.

출처 : 모두의 코드

Tags:

Categories:

Updated: