Есть ли какие-либо преимущества для 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*
в паре с длиной; все, что вы получаете по сравнению с этими, это полезные методы. Но он принципиально отличается от нулевого терминированного буфера символов.