c++ string_view文字与字符串文字在简单场景中的优势

qmb5sa22  于 2023-01-22  发布在  其他
关注(0)|答案(2)|浏览(188)

因此,我在阅读为新版本的CPP编写的代码时,经常会看到几乎完全使用string_view常量,即使在简单的用例中也是如此。
例如:

std::cout<<"Hello world"sv<<std::endl;

这有什么特别的原因吗?很明显这与存储时间无关,因为string_view只 Package 字符串文字。string_view的开销更低吗?
谢谢你抽出时间。

wxclj1h5

wxclj1h51#

所示示例不引入任何显著增益。
唯一可能存在差异的情况是在literal中使用零:

std::cout << "zerro \0insde"sv << std::endl;
    std::cout << "zerro \0insde" << std::endl;

https://godbolt.org/z/54v1a518f

ccrfmcuu

ccrfmcuu2#

创建一个std::string的开销很大,因为它经常涉及到动态分配内存。当创建std::string的开销很大时,使用const char*和长度参数作为替代可能会减少开销,但也会使代码可读性较差,难以使用。
std::string_view,在C++17中引入,是一个对字符序列的非拥有的只读引用。它的目的是为函数提供一种方法来获取对类似于std::string的对象的只读引用,而不需要指定确切的类型。在这种情况下使用const std::string&的缺点是它创建了一个std::string对象。
std::string_view是一个轻量级对象,它保存了一个指向原始字符串的指针及其长度。由于它不拥有所指向的内存,因此不需要管理内存本身,这使得它比std::string更高效。但是,在某些情况下,它也会有更多的开销。例如,如果std::string_view经常被复制,每次都需要创建新对象,这可能比复制std::string更昂贵。
此外,因为它不拥有它所指向的内存,所以它必须确保只要std::string_view在使用,原始字符串就保持有效,这也会增加一些开销。
小心,谨慎使用,因为你不拥有它
此外,阅读https://quuxplusone.github.io/blog/2021/11/09/pass-string-view-by-value/的文章非常棒

相关问题