Есть ли какие-либо преимущества для std :: string_view перед char *, кроме методов std :: string_view? - PullRequest
0 голосов
/ 22 мая 2018

Есть ли какие-либо преимущества для std :: string_view по сравнению с char *, кроме методов std :: string_view?

Есть ли причины для перефакторизации char* в string_view, если ни один из string_view методы будут использованы?

1 Ответ

0 голосов
/ 22 мая 2018

A char* - это просто указатель на символ.Чтобы интерпретировать его как строку, вам нужна длина, либо явная (строки паскаля сохраняют ее перед первым символом, либо вы можете передать информацию о длине рядом с ним в качестве другого аргумента или члена структуры), либо неявно (нулевое завершение).

Строковое представление - это абстракция второго из вышеперечисленных.В отличие от 1-го или 3-го, он не требует данных, смежных со строковым буфером, чтобы содержать информацию о длине.Это означает, что вы можете создавать не принадлежащие подстроки за O (1) время без копирования, чего не могут сделать другие два подхода.

Определение длины строки для 1-го и 2-го случая выше - это O (1) иO (n) для нулевого завершения.Это имеет значение.

Строковое представление не имеет фундаментальных преимуществ перед парой char* или char* в паре с длиной;все, что вы получаете по сравнению с этими, это полезные методы.Но он принципиально отличается от нулевого терминированного буфера символов.

...