当前位置: 首页 > article >正文

UE学习日志#21 C++笔记#7 基础复习7 string和string_view1

注:本文内容来自《C++20高级编程》,作为笔记

1 动态字符串

1.1 C风格的字符串

        1.C语言中,字符串的最后一个字符是null字符(\0),官方将这个null字符定义为NUL,只有一个L。

       2. <cstring>中,strlen()返回的是字符串的长度,而不是实际内存的长度,实际内存在字符串长度的基础上加1,因为结尾的'\0'。

       3. 若char[]的字符串,sizeof()返回实际内存大小,而char*存储的字符串sizeof()返回的是指针的大小,根据平台各不相同,是const char*的大小。

       4. 使用“安全C库”(ISO/IEC TR 24731)标准,能避免一些警告。

1.2 字符串字面量(string literal)

1.2.1 字面量池(literal pooling)

        字符串字面量实际上存储在内存的只读部分,通过这种方式,编译器可重用相同字符串字面量的引用,从而优化内存使用。这种技术称为字面量池(literal pooling)。

char arr[]{"hello"};
arr[1]='a';

        这种情况编译器会创建一个足以放下整个字符串的数组,然后将字符串复制到数组中,而不会将字面量放在只读的内存中,也不会使用字面量池。

1.2.2 原始字符串字面量(raw string literal)

R"(......)"

        这种方式会忽略中间的转义字符,如\t \n等,若想插入)",必须用可选的分隔符,例如:

const char* str{ R"-(Embedded)" characters)-"};

1.3 C++std::string类

        虽然string是一个类,但是几乎可以把string当作内建类型使用。

        重载了+,表示串联字符串。

        重载了+=,表示追加一个字符串。

        string的内存会自动分配,不会出现内存泄漏。

        一些操作:

                substr(pos,len);返回从给定位置开始的给定长度的字符串

                find(str);找到返回位置,没找到返回string::npos

                replace(pos,len,str);指定位置和长度替换为另一个字符串

                starts_with(str)/ends_with(str)如果以一个给定的字符串开头或结尾,返回true

        从C++20开始,std::string是constexpr类,这意味着string可以用于在编译期执行操作,并可用于constexpr函数和类的实现。

        auto string{"Hello World"s };可以把字符串字面量解释为std::string而不是const char*.

        使用vector<string>时要注意vector names{"Name1"s,"Name2"s,"Name3"s};

        string s{to_string(T val)};

        高级数值转换和低级数值转换。


http://www.kler.cn/a/532137.html

相关文章:

  • git 项目的更新
  • 排序算法--归并排序
  • 17.3.4 颜色矩阵
  • React中useState()钩子和函数式组件底层渲染流程详解
  • 基于密度泛函理论研究二维材料掺杂前后光电性能变化的模拟项目规划
  • MATLAB基础应用精讲-【数模应用】梯度直方图(HOG)(附C++和python代码实现)(二)
  • MySQL-索引下推
  • OpenAI 正式推出Deep Research
  • 网络工程师 (17)通信系统概述
  • ip数据报考研
  • .Net Core笔记知识点(跨域、缓存)
  • 【HTML性能优化】提升网站加载速度:GZIP、懒加载与资源合并
  • I-Wire单总线通信
  • 蓝桥杯备考:前缀和算法之最大子段和
  • Haskell语言的测试开发
  • 登录认证(6):拦截器:Interceptor
  • 进程间的数据桥梁:`multiprocessing.Queue` 的应用
  • MATLAB中extractBefore函数用法
  • 解锁C/C++:链表数据结构的奇幻之旅
  • Docker入门篇(Docker基础概念与Linux安装教程)
  • 课题推荐——基于自适应滤波技术的多传感器融合在无人机组合导航中的应用研究
  • 大模型系列21-AI聊天机器人
  • 生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)
  • TFTP 介绍
  • Rust 语言入门
  • Linux系统编程:环境变量