首页 > 解决方案 > 除了 std::string_view 方法之外,std::string_view 比 char* 有什么优势吗?

问题描述

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

如果不使用任何方法,是否有任何理由重新char*考虑?string_viewstring_view

标签: c++refactoringc++17c-stringsstring-view

解决方案


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

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

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

char*字符串视图与一对或一char*对与长度相比没有根本优势;与这些相比,您获得的只是实用方法。但它与以空结尾的字符缓冲区根本不同。


推荐阅读