Различия между 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
Другие вопросы по тегам