模板參數聲明中 template <typename T> 與 template <class T> 有何區別?
在模板參數列表中,兩者完全等價,無任何語義差異。 可互換使用。
class 關鍵字表示類型參數。typename 關鍵字,語義更清晰(參數不一定是類,可以是基本類型、枚舉等),並用於依賴類型名稱的前綴(如 typename T::iterator)。class 在模板參數中的用法。template <typename T>
void foo() {
typename T::value_type x; // 必須用 typename 告訴編譯器這是一個類型
// class T::value_type x; // 錯誤
}
typename**,語義更明確、現代風格。typename**。class 亦可,無需強行替換。