Какую цель преследует `gsl::string_span`?

Читая реализацию Microsoft Cpp Core Guidelines, я столкнулся с двумя вопросами:

  1. Почему gsl::string_span при условии, где gsl::span уже хорошо работает?
  2. Почему gsl::zstring_span при условии, где std::string уже гарантированно будет нулевым символом с C++11?

Любые иллюстрирующие ситуации будут высоко оценены.

1 ответ

Решение
  1. span("Hi") является {'H', 'i', '\0'} в то время как string_span("Hi") является {'H', 'i'}, string_span проверяет завершающий нулевой символ и не включает его в диапазон.
  2. string есть, а промежутки - нет, поэтому сравнивать их - это сравнивать яблоки и апельсины. zstring_span это диапазон с ограничением, что последний символ является нулевым символом. ни span ни string_span есть это ограничение.
Другие вопросы по тегам