我有两个重载功能
void foo(std::string value);
void foo(bool value);
当我用
打电话时foo(true ? "a" : "b");
为什么函数需要一个布尔值而不是字符串?
答案 0 :(得分:10)
bool
重载提供了更好的匹配,因为您获得了const char*
和bool
之间的转化。字符串重载需要转换为用户定义的类型。
条件运算符与它无关。例如,
#include <string>
#include <iostream>
void foo(bool) { std::cout << "bool" << std::endl; }
void foo(std::string) { std::cout << "string" << std::endl; }
int main()
{
foo("a");
}
输出:
BOOL
如果您要提供超载
void foo(const char*) {}
然后那个人就会被召唤。