如果我有一个类似于
的函数重载集template<typename T> void f(T&& t, int x = 1);
void f(int x = 0);
如果我使用整数参数调用f
,将优先调用其中的哪一个? e.g。
f(5);
答案 0 :(得分:5)
void f(int x = 0);
将被调用。在重载解析期间,当参数类型完全匹配时(即不需要转换),非模板总是优先于模板 - 参见§13.3.3/ 1.
(请注意,如果非模板重载而不是void f(long x = 0);
并且调用地点保持不变,或者如果重载保持不变但调用地点为f(5L);
,则会调用模板重载来代替。)