2
는 사람이 컴파일러는 두 개의 다음과 같은 경우에서와 다른 무엇을 말해 줄 수 있습니까?반환 유형에 대한 오버로드 기능? (재 방문)
#include <cstdio>
using namespace std;
template <typename TReturn, typename T>
TReturn convert(T x)
{
return x;
}
int main()
{
printf("Convert : %d %c\n", convert<int, double>(19.23), convert<char, double>(100));
return 0;
}
및
int convert(double x)
{
return 100;
}
char convert(double x)
{
return 'x';
}
int main()
{
printf("Convert : %d %c\n", convert(19.23), convert(100)); // this doesn't compile
return 0;
}
는 첫 번째 경우는 함수 오버로딩을하지 않습니다?
컴파일러가 템플릿 기능이 호출 발생
무효에있는 당신의 두 번째 경우. 컴파일하는 유일한 이유는'convert' 대신에'covert'를 입력했기 때문입니다. 반환 유형 만 다른 동일한 이름을 가진 두 함수를 선언 할 수 없습니다. –