我宣布了两个职能:
template<typename T>
void foo(T& in) { cout << in; }
void foo(bool& b) { cout << "Bool:" << (b ? "True" : "False");}
我正在调用这样的函数:
bool var = false; foo(var);
我知道我可以编写测试代码。但如果这是编译器相关的选择, 编写测试代码永远不会完全覆盖。
答案 0 :(得分:2)
第二个,即:
void foo(bool& b) { cout << "Bool:" << (b ? "True" : "False");}
因为它会更好地匹配bool var = false; foo(var);
。
一般来说,重载决策支持非模板化方法而不是模板化方法,因为您可以阅读ref:
最佳可行功能
F1被确定为比F2更好的功能 如果隐式转换[..]:
F1是非模板功能,而F2是模板专业化
PS:这是不依赖编译器,因为有些规则描述了在这种情况下如何发生重载解析,如上所述。
答案 1 :(得分:1)
过载分辨率通常比模板函数更喜欢非模板函数。因此将调用bool&
版本。这是明确定义的,而不是由编译器来决定。
有关详情,请参阅cppreference,&#34;最佳可行功能&#34;部分。 (我可以尝试链接到标准版,但可能更难以阅读。)