아래에는 두 개의 프로그램과 출력이 있습니다.C++의 템플릿 - 명시 적 함수가 호출되지 않는 이유는 무엇입니까?
코드 1 :
#include<iostream>
using namespace std;
template <class X,class Y> X sumargs(X a,Y b)
{
cout<<"\nThe sum is :" << a+b;
}
int sumargs(int a,char b)
{
cout<<"\nThis works\n";
return 1;
}
int main()
{
sumargs<int>(1,2);
sumargs<char>(4,9.0);
sumargs<double>('d',8);
sumargs(7,'a');
return 0;
}
출력 1
The sum is :3
The sum is :13
The sum is :108
This works
코드 2 :
#include<iostream>
using namespace std;
template <class X,class Y> X sumargs(X a,Y b)
{
cout<<"\nThe sum is :" << a+b;
}
int sumargs(int a,char b)
{
cout<<"\nThis works\n";
return 1;
}
int main()
{
sumargs<int>(1,2);
sumargs<char>(4,9.0);
sumargs<double>('d',8);
sumargs<int>(7,'a');
return 0;
}
출력 2
The sum is :3
The sum is :13
The sum is :108
The sum is :104
이유가 sumargs (7, 'a');코드 2 명시 적으로 오버로드 된 버전의 함수를 호출하지 않습니까? 여기
첫 번째 템플릿을하려고 사용한다 'sumargs'는 컴파일되지 않아야합니다. 그것이 그것이라고 주장에도 불구하고 결코 가치를 반환하지 않습니다. –
@SebastianRedl : 왜 오류를 감지하지 못합니까? g ++ 컴파일러를 사용하고 있습니다. – Inquisitive
-Wall -Werror를 사용하십시오. g ++는 때로는 관대하게 관대하다. –