함수 호출 문은 컴파일 타임에 함수 일치를 찾습니다. 함수 일치에는 최적 일치, 일치 없음, 모호한 일치라는 세 가지 결과가 있습니다.
위 코드에서 f(0)은 가장 잘 일치하는 f(int)를 찾게 되며, 모호한 일치 오류가 표시되지 않습니다.
gcc에서 f(NULL)는 모호한 일치 오류를 보고합니다. NULL은 __null로 정의되므로 void*에 대한 경로는 int에 대한 경로만큼 길기 때문에 Windows에서는 모호한 일치, NULL로 간주됩니다. 는 바로 0이므로 오류가 보고되지 않습니다. 이로 인해 템플릿을 다시 로드할 때
과 같은 특히 이상한 현상이 발생합니다.
으아악
f(0)의 가장 잘 일치하는 것은 f(int)이므로 f(int) 함수를 정의하고 오버로드된 함수 f(void)도 정의하는 경우 f(void)를 호출합니다. 올바른 접근 방식은 f(nullptr)이며, nullptr은 이 문제를 해결하기 위해 C 11에서 특별히 사용됩니다.
함수 호출 문은 컴파일 타임에 함수 일치를 찾습니다. 함수 일치에는 최적 일치, 일치 없음, 모호한 일치라는 세 가지 결과가 있습니다.
위 코드에서 f(0)은 가장 잘 일치하는 f(int)를 찾게 되며, 모호한 일치 오류가 표시되지 않습니다.
gcc에서 f(NULL)는 모호한 일치 오류를 보고합니다. NULL은 __null로 정의되므로 void*에 대한 경로는 int에 대한 경로만큼 길기 때문에 Windows에서는 모호한 일치, NULL로 간주됩니다. 는 바로 0이므로 오류가 보고되지 않습니다. 이로 인해 템플릿을 다시 로드할 때
과 같은 특히 이상한 현상이 발생합니다. 으아악f(0)의 가장 잘 일치하는 것은 f(int)이므로 f(int) 함수를 정의하고 오버로드된 함수 f(void)도 정의하는 경우 f(void)를 호출합니다. 올바른 접근 방식은 f(nullptr)이며, nullptr은 이 문제를 해결하기 위해 C 11에서 특별히 사용됩니다.