Расширяет ли string_view неопределенное поведение? - PullRequest
2 голосов
/ 09 ноября 2019

Предположим, у нас есть строка s и string_view sv в некоторой части s, так что

sv.data() + sv.size() < s.data() + s.size()

, другими словами, символ после конца sv ​​по-прежнему является частью s. Является ли следующее определенное или неопределенное поведение?

string_view sv1 {sv.data(), sv.size()+1};

Итак, можем ли мы расширить string_view?

Из cppreference:

Поведение не определено, если [s, s + count) не является допустимым диапазоном (даже если конструктор может не получить доступ ни к одному из элементов этого диапазона).

Является ли [sv.data (), sv.data () + sv.size () + 1) допустимым диапазоном, поскольку он является частью s?

1 Ответ

1 голос
/ 09 ноября 2019

Да, при условии следующего:

auto s = "The answer is: 42";
std::string_view sv{s, 5};

Тогда:

std::string_view sv1{sv.data(), sv.size() + 1}; 

Допустимый диапазон. Это полностью идет вразрез с Основными принципами C ++ и, вероятно, не является отличным способом для разработки вашего кода ... но да ... это действительно.

...