то теряем ли мы гарантированную нуль-терминированность?
С++17
для стрнг_вью вообще да, для конкретно того нет
Нуль-терминатор от этого никуда не исчезает, но в общем string_view не даёт гарантий на его наличие
string_view это слайс (считай ссылка) на строку. Если она берется от строкового литерала (который нуль-терминирован), то и string_view будет нуль-терминирован. Но в общем случае string_view не дает такой гарантии
string_view -- это указатель и число символов, расположенных там. Обращение к памяти за пределами этого диапазона -- это UB, включая sv[sv.size()]. Для строк можно писать s[s.size()], для string_view -- нет. https://en.cppreference.com/w/cpp/string/basic_string_view/operator_at
Обсуждают сегодня