关于 C++ 中模板的显示实参的匹配顺序问题
template <class T1, class T2, class T3>
T3 f( T1, T2 );
然后是函数调用:
f<double>( 3L, 4 );
谁能告诉我“从左到右”匹配的时候,分别将【函数调用语句】中的类型 double, long, int 匹配给【模板形参列表】T1,T2,T3,还是【函数使用的参数列表】T3,T1,T2呢?换句话说,
(1)T1 = double, T2 = long, T3 = int
(2)T3 = double, T1 = long, T2 = int
中的哪一个正确呢?
如果能给出参考文献就更好了(C++ Primer 3rd ed.)上没讲明白这一点。
[解决办法]
可通过编译例子程序,从编译结果体会书上未找到的细节。
#include <iostream>
using namespace std;
template <class T1, class T2, class T3>
T3 f( T1 a, T2 b)
{
return (T3)a + (T3)b;
}
int main()
{
double d1 = f<double>( 3L, 4 );
//编译报错:error C2783: “T3 f(T1,T2)”: 未能为“T3”推导 模板 参数
double d2 = f<long, int, double>( 3L, 4 );
long l = f<double, int, long>( 3, 4 );
int i = f<double, long, int>( 3, 4 );
//以上3行显式地按模板定义的顺序给出全部参数,编译通过。
return 0;
}