为什么条件运算符作为参数传入时会被视为bool?

时间:2013-08-20 16:28:35

标签: c++ overloading conditional-operator function-parameter

我有两个重载功能

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

当我用

打电话时
foo(true ? "a" : "b");

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

1 个答案:

答案 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*) {}
然后那个人就会被召唤。