Неявное преобразование из 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 обычно является расширением. Он не может влиять на существующий тип без эффективного разметки этого типа.