Различия между boost::string_ref и boost::string_view
Boost предоставляет две разные реализации string_view
, которая будет частью C++17:
boost::string_ref
вutility/string_ref.hpp
boost::string_view
вcore/string_view.hpp
Есть ли существенные различия между ними? Что должно быть предпочтительным в будущем?
Примечание: я заметил в Boost 1.61, boost::log устарел как string_ref в пользу string_view; возможно это показатель? ( http://www.boost.org/users/history/version_1_61_0.html)
2 ответа
Как ни странно сейчас я на конференции ACCU с Маршаллом Клоу (сила, стоящая за string_view и др. В комитете), и я буквально собирался спросить его в баре ранее сегодня, прежде чем меня отозвали о его взглядах на string_view против Библиотека поддержки директив Бьярне (GSL) gsl::span<T>
это очень похоже ( gsl-lite - моя любимая реализация GSL, так как она совместима с 03, но есть много других). Я слышал, что они должны были быть объединены в единую реализацию для стандартизации, и ,gsl::span<T>
Направление будет в будущем, но я сам доложу сюда изо рта лошади, если я ошибаюсь. А пока предположим, что gsl::span<T>
Направление - это текущее будущее, и Boost будет обновлен, и вскоре появится нечто подобное, даже если using string_view = gsl::span<char>
по сути, string_view
Изменить: я только что говорил с Маршаллом внизу. Он говорит мне, что string_view, согласно реализации в Boost, определенно присутствует в C++ 17. array_view не является и не является чем-то исторически окружающим string_view на данный момент.
GSL string_span - это отдельная сущность, которую не ожидается вводить в C++ 17, и нет никаких существующих планов унифицировать реализации, поскольку они решают различные варианты использования, в частности, что string_view всегда является постоянным представлением массива заимствованных символов, тогда как ожидается string_span чтобы быть потенциально модифицируемым представлением массива заимствованных символов с потенциальным использованием в качестве источника для создания новых строк, поэтому string_span может в конечном итоге стать обобщением string_view в каком-то будущем стандарте C++.
Согласно этому письму из списка рассылки boost, boost:: string_ref не будет использоваться в будущем и заменяется string_view в других библиотеках boost.
boost:: string_view имеет следующие преимущества:
- Лучше соответствует тому, что комитет по стандартам делает для C++17
- Имеет ПУТЬ больше поддержки constexpr