c++ - 除了 std::string_view 方法之外, std::string_view 比 char* 有什么优势吗?

标签 c++ refactoring c++17 c-strings string-view

除了 std::string_view 方法之外,std::string_view 是否比 char* 有任何优势?

如果没有使用 string_view 的方法,是否有任何理由将 char* 重构为 string_view

最佳答案

char* 只是一个指向字符的指针。要将其解释为字符串,您需要一个长度,可以是显式的(pascal 字符串将其存储在第一个字符之前,或者您可以将长度信息作为另一个参数或结构成员传递给它),或者是隐式的(空终止)。

字符串 View 是上述第二个 View 的抽象。与第一个或第三个不同,它不需要字符串缓冲区的连续数据来包含长度信息。这意味着您可以在 O(1) 时间内创建非拥有子字符串而无需复制,这是其他两种方法无法做到的。

确定上述第一种和第二种情况的字符串长度是 O(1) 和 O(n) 以空终止。这很重要。

字符串 View 与一对 char* 或与长度配对的 char* 相比没有根本优势;与那些相比,你所获得的只是实用方法。但它与空终止字符缓冲区有根本不同。

关于c++ - 除了 std::string_view 方法之外, std::string_view 比 char* 有什么优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50457461/

相关文章:

c++ - 如何通过 boost asio 制作真正的异步客户端

refactoring - 任何类中的方法顺序

java - 重构异常处理

c++ - 存储后的std::atomic地址

c++ - 切片整数参数包

c++ - 在头文件上为类声明 = 和 [] 运算符, "must be a nonstatic member function"错误

c++ - 为什么在使用多重继承时不同的 `this` 地址

c++ - "operator=="或 "operator LPCTSTR"之间的混淆

c# - 帮助重构为 Action<T> 委托(delegate)

c++ - std::holds_alternative 可变参数模板