建站公司网站源码社区母婴网站建设的目的
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:40
当前位置: 首页 > news >正文
建站公司网站源码社区,母婴网站建设的目的,常用的网络推广方法,企业网站建设应该注意什么事项问题为了解决std::string初始化(或拷贝)成本高昂的问题#xff0c;C17引入了std::string_view。std::string_view提供对现有字符串(C风格字符串、std::string、或另一个std::string_view)的只读访问#xff0c;而无需进行拷贝。当想要有效地处理和操作字符串而不修改它们时#… 为了解决std::string初始化(或拷贝)成本高昂的问题C17引入了std::string_view。std::string_view提供对现有字符串(C风格字符串、std::string、或另一个std::string_view)的只读访问而无需进行拷贝。当想要有效地处理和操作字符串而不修改它们时通常使用std::string_view。 int test_string_view_copy() {std::string str1{ china };std::string_view strv1{ beijing };// str2和str1的数据存放在完全不同的两个位置(副本); strv2和strv1的数据都指向同一个指针地址,没有额外的拷贝(副本)std::string str2{ str1 };std::string_view strv2{ strv1 };std::cout str2: str2 , strv2: strv2 \n; // str2: china, strv2: beijingstr1.clear();strv1 {}; //strv1 strv1.substr(0, 0); //strv1.remove_prefix(strv1.size()); // 注意它们的区别// clear str1完全不会影响到str2; clear strv1也不会影响到strv2,因为strv2指向的指针地址没有变,对strv1 clear操作并不会影响到它之前指向的指针地址数据std::cout str2: str2 , strv2: strv2 \n; // str2: china, strv2: beijingreturn 0; } std::string为模板类std::basic_stringchar而std::string_view为模板类std::basic_string_viewchar。如下其中CharT为character type。 templateclass CharT,class Traits std::char_traitsCharT,class Allocator std::allocatorCharT class basic_string;templateclass CharT,class Traits std::char_traitsCharT class basic_string_view;using string basic_stringchar; using string_view basic_string_viewchar; 模板类std::basic_string的声明参考 https://en.cppreference.com/w/cpp/header/string 模板类std::basic_string_view的声明参考https://en.cppreference.com/w/cpp/header/string_view std::basic_string有析构函数而std::basic_string_view没有析构函数。 std::string_view优点 1.轻便主要用于提供字符串的视图(view)使std::string_view拷贝字符串的过程非常高效永远不会创建字符串的任何副本不像std::string会效率低下且导致内存开销。std::string_view不拥有字符串数据它仅提供对现有字符串的视图或引用(view or reference)。这使得它适合需要访问或处理字符串而无需内存分配或重新分配开销的场景. 2.轻量高效由于std::string_view不管理内存因此它具有最小的内存占用。分配或拷贝std::string_view既快速又便宜因为它只涉及拷贝字符串的引用、长度和起始位置。 3.更好的性能std::string_view比const std::string更好因为它消除了在字符串的最开头有一个std::string对象的约束因为std::string_view由两个元素组成第一个是const char*指向数组的起始位置第二个是size。 4.std::string_view提供了std::string提供的成员函数的子集主要集中于只读操作。虽然你可以访问字符并执行搜索但无法修改std::string_view的内容。这种不变性确保了操作的安全性并保证所查看的字符串保持不变。 注意 1.与C字符串和std::string在字符串末尾需要字符串终止符(\0)不同std::string_view不需要空终止符来标记字符串的结尾。因为它记录了字符串的长度。 2.从概念上讲std::string_view只是字符串的视图不能用于实际修改字符串。创建std::string_view无需拷贝数据。 3.std::string_view可以使用许多不同类型的字符串进行初始化C格式字符串、std::string、或另一个std::string_view。C风格字符串和std::string都会隐式转换为std::string_view。但std::string_view不会隐式转换为std::string因为std::string会拷贝初始值(这是昂贵的)所以C不允许将std::string_view隐式转换为std::string。这是为了防止意外地将std::string_view参数传递给std::string参数以及无意中在可能不需要此类副本的情况下创建昂贵的副本。如果需要可以有两个选择 (1).使用std::string_view初始值显式创建std::string; (2).使用static_cast将现有的std::string_view转换为std::string. 以下为测试代码注意注释说明 int test_string_view_functions() {// unlike std::string, std::string_view has full support for constexprconstexpr std::string_view strv{ china beijing };// substrauto strv1 strv.substr(6);std::cout strv1: strv1 std::endl; // strv1: beijing//strv1[0] B; // 无论strv是不是constexpr, strv1都不能作修改char str1[]{ beijing };std::string_view strv2{ str1 };std::cout strv2: strv2 std::endl; // strv2: beijingstr1[0] B;std::cout strv2: strv2 std::endl; // strv2: Beijingstd::cout at 2: strv2.at(2) , back: strv2.back() \n; // at 2: i, back: gstrv2.remove_prefix(3);std::cout remove_prefix 3: strv2 \n; // remove_prefix 3: jingstrv2.remove_suffix(2);std::cout remove_suffix 2: strv2 \n; // remove_suffix 2: jistd::string str{};strv.copy(str.data(), strv.size()); // 注意str并非完整的std::string对象,str.size()为0std::cout str: str.data() \n; // str: china beijing note:是str.data()而不能是str// 注意以下两条语句的差异, str.size()为0std::cout strv.compare(str.data()): strv.compare(str.data()) \n; // strv.compare(str.data()): 0std::cout strv.compare(str): strv.compare(str) \n; // windows: strv.compare(str): 1 linux: strv.compare(str): 13auto found strv.find(strv2);std::cout found: found \n; // found: 9std::cout strv rfind: strv.rfind(i) \n; // strv rfind: 10std::cout strv find_first_of: strv.find_first_of(i) \n; // strv find_first_of: 2std::cout strv find_last_of: strv.find_last_of(i) \n; // strv find_last_of: 10std::cout strv find_last_not_of: strv.find_last_not_of(in) \n; // strv find_last_not_of: 12std::cout strv find_first_not_of: strv.find_first_not_of(in, 1) \n; // strv find_first_not_of: 1// std::string_view不需要空终止符来标记字符串的结尾,因为它记录了字符串的长度char name[]{ c, h, i, n, a };std::string_view strv3{ name, std::size(name) };std::cout strv3: strv3 \n; // strv3: chinastd::cout name: name \n; // windows: name: china烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫蘐?宋 linux: name: chinaBeijing// std::string_view to std::string: std::string_view不会隐式转换为std::stringstd::string str2{ strv }; // explicit conversionstd::cout str2: str2 \n; // str2: china beijing// std::string_view to C-style string: std::string_view - std::string - C-style stringauto str3{ str2.c_str() };std::cout str3 length: strlen(str3) \n; // str3 length: 13// std::string_view just only a viewauto addr [] {std::string str_csdn{ https://blog.csdn.net/fengbingchun/ };std::string_view strv_csdn{ str_csdn };std::cout strv csdn: strv_csdn \n; // strv csdn: https://blog.csdn.net/fengbingchun/return strv_csdn;};std::string_view strv4{ addr() };std::cout strv4 csdn: strv4 \n; // windows: strv4 csdn: 葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺 linux: strv4 csdn: ▒(a▒▒\▒▒G▒cn.net/fengbingchun/// literals for std::string_view: 可以通过在双引号字符串文字后面使用sv后缀来创建类型为std::string_view的C风格字符串常量using namespace std::string_literals; // access the s suffixusing namespace std::string_view_literals; // access the sv suffixstd::cout foo\n; // no suffix is a C-style string literalstd::cout goo\ns; // s suffix is a std::string literalstd::cout moo\nsv; // sv suffix is a std::string_view literalreturn 0; } 执行结果如下图所示 GitHubhttps://github.com/fengbingchun/Messy_Test
- 上一篇: 建站公司网站论坛wordpress弹窗评论
- 下一篇: 建站公司有哪些服务搜索引擎作弊的网站有哪些
相关文章
-
建站公司网站论坛wordpress弹窗评论
建站公司网站论坛wordpress弹窗评论
- 技术栈
- 2026年04月20日
-
建站公司网站 phpwind医疗网站
建站公司网站 phpwind医疗网站
- 技术栈
- 2026年04月20日
-
建站公司前景中文域名转码网站
建站公司前景中文域名转码网站
- 技术栈
- 2026年04月20日
-
建站公司有哪些服务搜索引擎作弊的网站有哪些
建站公司有哪些服务搜索引擎作弊的网站有哪些
- 技术栈
- 2026年04月20日
-
建站公司有哪些服务泰安网站建设制作
建站公司有哪些服务泰安网站建设制作
- 技术栈
- 2026年04月20日
-
建站公司怎么接单织梦网站建设培训班
建站公司怎么接单织梦网站建设培训班
- 技术栈
- 2026年04月20日
