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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам