答案是std::string_view。 在C++17中引入的std::string_view是一种轻量级的字符串视图类型,类似于Golang的slice。它的出现主要是为了提供一种非拥有性的字符串引用机制,用于处理字符串的读取和操作,而无需进行内存拷贝或分配新的字符串对象。 std::string_view并不会真正分配存储空间,而只是原始数据的一个只读...
voidTestString(conststd::string&str){std::cout<<"string: "<<str<<std::endl;for(int i=0;i<1000000;i++){std::string sub_str=str.substr(5,10);}}voidTestStringView(conststd::string_view&str_view){std::cout<<"str_view: "<<str_view<<std::endl;for(int i=0;i<1000000;i++){...
在使用std::string_view时,最重要的是确保引用的数据在std::string_view使用期间保持有效。 2.4std::basic_string_view和std::string_view的关系(Relation betweenstd::basic_string_viewandstd::string_view) std::string_view和std::basic_string_view在 C++ 标准库中是紧密相关的。实际上,std::string_view是...
做函数形参的时候,使用std::string_view基本一定优于老式的const std::string&这种写法。 为了验证这个结论,下面的代码实现了一个断词器,然后针对64MB的数据做断词处理并且分别记录使用std::string和std::string_view作为基础类型时断词器运行的时间: #include<iostream>#include<chrono>#include<string_view>template...
std::string_view stringView2(cstr,4); std::cout<<"stringView1:"<< stringView1 <<", stringView2:"<< stringView2 <<std::endl; std::stringstr ="yangxunwu"; std::string_view stringView3(str.c_str()); std::string_view stringView4(str.c_str(),4); ...
std::string_view本身并不拥有字符串数据,它只是指向现有字符串的视图。因此,返回std::string_view不...
如果生成的std::string无需进行修改操作,可以把std::string转换为std::string_view,std::string_view...
std::string_view是一个轻量级的字符串视图,用于表示字符串的引用。它不存储字符串本身,而是引用一个已经存在的字符串,这样可以节省内存,并且在处理大型字符串时更加高效。通过string_view,我们可以访问字符串的内容而不必担心所有权或复制问题。例如,我们可以通过以下方式创建并使用一个string_view实例...
反之就要慎重了。sv指向的字符串就在当前上下文里,一不小心返回局部变量的字符串的sv,效果等同于返回...
std::string_view 是 C++17 引入的一个轻量级的非拥有型字符串表示,它设计用来提供对字符序列的引用。std::string_view 不拥有它所表示的字符串,它只是提供了一种方式来引用或“查看”存储在其他地方的字符串,比如一个 std::string 或者字符数组。 尽管std::string_view 不拥有数据且通常用于引用不可变数据,但...