默认参数v模板在重载决策中的优先级

时间:2012-04-02 22:42:01

标签: c++ c++11

如果我有一个类似于

的函数重载集
template<typename T> void f(T&& t, int x = 1);
void f(int x = 0);

如果我使用整数参数调用f,将优先调用其中的哪一个? e.g。

f(5);

1 个答案:

答案 0 :(得分:5)

void f(int x = 0);将被调用。在重载解析期间,当参数类型完全匹配时(即不需要转换),非模板总是优先于模板 - 参见§13.3.3/ 1.

(请注意,如果非模板重载而不是void f(long x = 0);并且调用地点保持不变,或者如果重载保持不变但调用地点为f(5L);,则会调用模板重载来代替。)