std :: string неявный приоритет преобразования, string_view вместо const char * - PullRequest
0 голосов
/ 06 августа 2020

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

void Set(const char * str) { std::cout << "const char * setter: " << str << "\n"; }
void Set(const std::string_view & sv) { std::cout << "string_view setter: " << sv << "\n"; }

И я вызываю Set () для std::string. Он выбирает перегрузку std::string_view, а не перегрузку const char *, то есть выбирает неявное преобразование std::string в std::string_view вместо std::string в const char *.

Это гарантированное поведение в std::string, или выбор был произвольным? Если это гарантированное поведение, как они заставили его предпочесть преобразование string_view другому?

1 Ответ

6 голосов
/ 06 августа 2020

std::string имеет неявный оператор преобразования в std::string_view, поэтому он может преобразовывать в std::string_view неявно. Но std::string не имеет оператора преобразования в const char*, он не может преобразовать в const char*. Вы должны явно вызвать его метод c_str(), чтобы получить const char*:

Set(some_string.c_str());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...