假設下面的模板定義(代碼是毫無意義的):一個關於Ç問題++模板
template<class X, class Y>
bool FooBar(const Y& val) { return sizeof(X) + 4; }
我發現下面的調用代碼是合法的:
float temp = 0.f;
FooBar<int>(temp);
正如你所看到的,第二類型參數Y
可以省略。編譯器通過查找temp
的參數類型來推斷Y
的類型。
什麼規則或規範的C + +模板允許這?我很驚訝地看到它。
實例化是指編譯器生成要運行的函數體的副本,但不是它如何獲取用於調用的模板參數。 – 2011-02-04 05:32:37