下面我给出两个程序及其输出.
代码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;
}
Run Code Online (Sandbox Code Playgroud)
输出1:
The sum is :3
The sum is :13
The sum is :108
This works
Run Code Online (Sandbox Code Playgroud)
代码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;
}
Run Code Online (Sandbox Code Playgroud)
输出2:
The sum is :3
The sum is :13
The sum is :108
The sum is :104
Run Code Online (Sandbox Code Playgroud)
为什么是sumargs(7,'a'); 在代码2中没有调用函数的显式重载版本?
这里:
sumargs<int>(7,'a');
// ^^^^^
Run Code Online (Sandbox Code Playgroud)
要指定模板参数明确.由于您明确指定了模板参数,因此编译器将仅考虑函数模板来解析调用.
您的重载不是模板,非模板不接受模板参数.因此,编译器不会考虑它.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |