Почему условный оператор будет рассматриваться как bool, когда передается как параметр?

У меня две перегруженные функции

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

когда я звоню с

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

почему функция принимает логическое значение будет вызываться вместо строки?

3

Решение

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*) {}

тогда этот будет назван.

10

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]