2012-04-02 97 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);,模板过载会代替调用。)