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

ycs*_*hao 3 c++ overloading conditional-operator function-parameter

我有两个重载功能

void foo(std::string value);
void foo(bool value);
Run Code Online (Sandbox Code Playgroud)

我打电话的时候

foo(true ? "a" : "b");
Run Code Online (Sandbox Code Playgroud)

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

jua*_*nza 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");
}
Run Code Online (Sandbox Code Playgroud)

输出:

布尔

如果你提供过载

void foo(const char*) {}
Run Code Online (Sandbox Code Playgroud)

然后那个人会被召唤.

  • @ycshao是的,那会有用.或者提供一个带有`const char*`的重载,然后从内部构造一个字符串. (2认同)