以下に、2 つのプログラムとその出力を示します。
コード 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では、関数の明示的にオーバーロードされたバージョンを呼び出していませんか?