Неявное преобразование из std::string в std:: string_view в С++ 17 (было в std:: experimental:: basic_string_view)

Мой вопрос касается С++ 17: http://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view

Какое предостережение от неявного преобразования из std:: basic_string в std:: basic_string_view, что оно не было включено в интерфейс последнего?

Я считаю, что это значительно улучшит этот класс. Особенно семейство операторов сравнения, которые также не принимают std::string как ни lhs, ни rhs.

В основы библиотеки TS есть такое преобразование: http://en.cppreference.com/w/cpp/experimental/basic_string_view/basic_string_view

Этот вопрос касается того, почему он был удален. Вернее, не принято.

Ответы

Ответ 1

basic_string_view считается классом нижнего уровня. Это поставщики контейнеров строк, которые несут ответственность за предоставление неявных преобразований string_view. Если у вас есть собственный тип строки, вы можете дать ему возможно explicit operator string_view() перегрузку для выполнения неявного преобразования.

Как таковое было решено (PDF), что basic_string обеспечит преобразование в basic_string_view. Исходная версия Library Fundamentals поместила неявное преобразование в basic_string_view, поскольку TS обычно является расширением. Он не может влиять на существующий тип без эффективного разметки этого типа.