我开始阅读有关模板和我困惑的下面。显式模板参数规范
template<class T>
T max(T t1, T t2)
{
if (t1 > t2)
return t1;
return t2;
}
int main(){
std::cout<<max<int>(120,14.55);
return 0;
}
输出为120。但是,当我编译上面我得到这样的警告:
warning:passing double for argument 2 to T max(T, T) [with T = int].
我的问题是,为什么这样的警告来了,因为我已经实例化T max(int t1,double t2)
。
因为根据我的理解,如果我明确提到只有一种数据类型(这里是int
),其他的会被编译器从参数类型(14.55
)中扣除。这意味着T max(T t1, T t2)
在这种情况下,实例化T max(int t1,double t2)
。我从互联网上某些模板的文档阅读这一概念。
请清除我的疑惑,否则我无法进一步处理。
你需要阅读更多有关模板。 'template'中的'T'是用于_both_参数的类型,并且您在调用中明确将其设置为'int'。 –
是Joachim.even这是我的理解,但我读了http://www.codeproject.com/Articles/257589/An-Idiots-Guide-to-Cplusplus-Templates-Part-1上述概念。你能告诉我,我明白的是错的还是不是? –