2012-04-02 80 views
3

如果我有一個函數重載集合類似默認參數v模板優先

template<typename T> void f(T&& t, int x = 1); 
void f(int x = 0); 

其中哪些將優先被稱爲如果我叫f整數參數?例如

f(5); 

回答

5

void f(int x = 0);將被調用。在重載解析期間,當參數類型完全匹配時(即不需要轉換),非模板始終優於模板。–請參閱第13.3.3節/ 1。

(請注意,如果非模板超載是不是void f(long x = 0);和調用點保持不變,或者如果過載保持不變,但調用點是不是f(5L);,模板過載會代替調用。)