使用哪个功能,模板与否?

时间:2017-12-27 09:56:57

标签: c++ function

我宣布了两个职能:

template<typename T>
void foo(T& in) { cout << in; }
void foo(bool& b) { cout << "Bool:" << (b ? "True" : "False");}

我正在调用这样的函数:

bool var = false; foo(var);

我知道我可以编写测试代码。但如果这是编译器相关的选择, 编写测试代码永远不会完全覆盖。

2 个答案:

答案 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;部分。 (我可以尝试链接到标准版,但可能更难以阅读。)