C++模板函式實現型別推導
以快讀函式舉例說明
無法型別推導的情況
template <typename T> inline T read() { T x = 0; int f = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; }
模板引數沒有實際傳入到函式當中,沒有參與實際的操作,函式無法讀取資訊,不能實現型別推導
能夠型別推導的情況
template<typename T> bool read(T& x) { x = 0; // 初始化 T sign = 1; char ch = getchar(); while (ch < '0' || ch > '9') { // 跳過非數字字元 if (ch == '-') sign = -1; // 處理負號 ch = getchar(); } if (ch < '0' || ch > '9') return false; // 如果沒有讀到數字,則返回false while (ch >= '0' && ch <= '9') { x = x * 10 + (ch - '0'); // 計算數字 ch = getchar(); } x *= sign; // 應用符號 return true; // 讀取成功 }
模板引數參與了函式運算,能夠被推匯出型別