如果我有一个类似于
template<typename T> void f(T&& t, int x = 1);
void f(int x = 0);
如果我使用整数参数调用f
,将优先调用其中的哪一个?例如
f(5);
void f(int x = 0);
将被调用。在重载解析期间,当参数类型完全匹配(即不需要转换(时,非模板始终优先于模板 – 请参阅 §13.3.3/1。
(请注意,如果非模板重载改为void f(long x = 0);
并且调用站点保持不变,或者如果重载保持不变但调用站点改为f(5L);
,则将调用模板重载。