3

我有两个重载函数

void foo(std::string value);
void foo(bool value);

当我用

foo(true ? "a" : "b");

为什么函数需要一个布尔值而不是字符串?

4

1 回答 1

10

bool重载提供了更好的匹配,因为您可以在 a 和 之间进行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");
}

输出:

布尔

如果您要提供重载

void foo(const char*) {}

然后会调用那个。

于 2013-08-20T16:31:54.993 回答