學習c++的時候遇到一道題,如下:
template <typename T> T calc(T,int); template <typename T> T fcn(T,T); double d; float f; char c; calc(c, 'c'); //正確 calc(d, f); //錯誤 fcn(c , 'c'); //正確 fcn(d, f); //錯誤
一開始不能理解為什么fcn(d, 'c') 是正確的,‘c'應該是指字符c的ascill碼,應該是一個int型,而前面的c是一個字符型,但是它們使用的是同一個模板參數,所以它們應該為同一個類型才對。於是我用編譯器測試輸出,如下:
char c = 'a'; int b = 'a'; cout << c << endl << 'a' << endl << b;
結果為:a a 97。從這個結果,可以得出,對於’a'這個字符字面值常量,它既可以賦值給char型變量,也可以賦值給int型變量,所以反推,'a'可以根據需要視作char型或者int型。在上面的題中,calc(c, 'c')中的'c'就是一個int型,而fcn(c, 'c')中的'c'是一個char型。
對於為什么會有這種情況,我沒有很深的了解,希望有大佬指教,謝謝~。