我開始閱讀有關模板和我困惑的下面。顯式模板參數規範
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上述概念。你能告訴我,我明白的是錯的還是不是? –