У меня две перегруженные функции:
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 другому?