错误:“string_view”不是“std”的成员 社区维基1 发布于 2022-11-04 新手上路,请多包涵 我是C++ 新手。我在 windows10 的 visual-studio-code 中编译了我的代码,其中包含 2 个类型为 string 和 string_view 的变量。字符串变量很好,但 string_view 给出了错误。我还在 configuration.json 中启用了 c++17...
error C2039: “ac_strlen”: 不是 “std” 的成员 vs2019编译cgal5.5出现的错误, vc14.2-x...
具体来说,std::string_view只由一个指针和一个长度组成,标识了一段不属于string_view的字符数据,视图不能修改这段数据。 因此,复制string_view是一个浅层操作:不会复制任何字符串数据。 使用std::string_view开销小且速度快,通过值传递std::string_view总是能保证很小的开销。 然而,使用std::string_view也存在...
std::string有一个到std::string_view的转换函数,其他的都是正常走std::string_view的构造函数。 std::string_view只是一个视图,用来指代原字符串的,保有一个size和一个指针即可。 新标准增加的库基本上不会再以const std::string&这种作为形参,比如std::format,std::vformat。
string_view不关心\0,会关心实际的字符个数。 代码语言:javascript 复制 std::string_view s="abc\0\0def"sv;std::cout<<"s: "<<s.size()<<" \""<<s<<"\"\n"; 输出:s: 8 "abcdef" 代码语言:javascript 复制 std::string_view str{"hello",1};std::cout<<str.data()<<std::endl;//...
上面的例子仅仅是把string类型修改成了string_view就获得了性能上的提升。一般情况下,将程序中的string换成string_view的过程是比较直观的,这得益于两者的成员函数的相似性。但并不是所有的“翻译”过程都是这样的,比如: voidlines(std::vector<std::string> &lines,conststd::string&str) { ...
; std::string_view view(str); std::cout << view << std::endl; return 0; } 复制代码 上面的代码创建了一个std::string_view对象view,它引用了字符串"Hello, world!"。通过调用view的成员函数和操作符,可以方便地对字符串进行操作,而不会引发内存拷贝。 需要注意的是,由于std::string_view不拥有...
std::stringmem; S(std::string_view s) : mem{s} {} }; 此时的开销情况如何? 第一,Implicit ctor。除了mem创建,没有多余开销。共1次分配。 第二,lvalue。通过隐式转换创建string_view,然后拷贝到成员变量。共1次分配。 第三,xvalue。同上。共1次分配。
一般情况下,我们建议对 std::vector 这样的序列使用 at,永远不要使用 basic_string_view。 传递给序列的无效索引是一个逻辑错误,应在开发期间发现和修复。 如果某个程序不确定其索引是否有效,则应测试它们,而不是调用 at() 并依赖异常来防范草率编程。有关详细信息,请参阅 basic_string_view::operator[]。
从高层次来看,std::string_view的目的是避免复制已由其他程序拥有的数据,并允许对类似std::string的对象进行不可变访问。字符串视图是一种受限制的字符串,仅支持不可变操作。此外,字符串视图string view还有两个附加的可变操作:remove_prefix和sv.remove_suffix。