Per*_*ual 5 c++ string-view c++17
因此,我正在阅读为较新版本的 CPP 编写的代码,并且经常看到几乎专门使用 string_view 文字,即使在简单的用例中也是如此。
例如:
std::cout<<"Hello world"sv<<std::endl;
Run Code Online (Sandbox Code Playgroud)
这有什么特别的原因吗?这显然与存储持续时间无关,因为 string_view 仅包装字符串文字。string_view 的开销是否较低?
谢谢您的宝贵时间。
创建 a 的std::string成本可能很高,因为它通常涉及动态分配内存。当创建 a 的成本std::string是一个问题时,使用const char*和 长度参数作为替代方案可能会降低费用,但也会降低代码的可读性和使用性。
std::string_viewC++17 中引入的 是对字符序列的非拥有、只读引用。其目的是为函数提供一种对类似于 的对象进行只读引用的方法std::string,而无需指定确切的类型。在这种情况下使用 a 的缺点const std::string&是它会创建一个std::string对象。
std::string_view是一个轻量级对象,它保存指向原始字符串及其长度的指针。因为它不拥有它所指向的内存,所以它不需要自己管理内存,这可以使其比std::string. 然而,在某些情况下它也可能会产生更多的开销。例如,如果std::string_view频繁复制 a ,则每次都需要创建一个新对象,这可能比复制 a 更昂贵std::string。
此外,因为它不拥有它指向的内存,所以它必须确保只要std::string_view使用它,原始字符串就保持有效,这也会增加一些开销。
PS 请小心并谨慎使用它,因为它不属于您
另外,非常值得阅读的文章https://quuxplusone.github.io/blog/2021/11/09/pass-string-view-by-value/