默认参数 v 模板重载解析中的优先级



如果我有一个类似于

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);,则将调用模板重载。

最新更新