AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 18
所有权 vs 表示: std::string 和 std::string_view
C++ SELF
等级 18,
课时 0
我们来分析在 C++ 中谁“拥有”字符串的字符,谁只是“查看”它们:
std::string
和
std::string_view
有何不同、何时传递字符串会导致拷贝、轻量级 view(指针 + 长度)是如何工作的、为什么它不保证数据的生命周期,以及由于对所有权和以空终止符为前提的错误预期经常会出现哪些常见错误。
std::string_view
作为参数
C++ SELF
等级 18,
课时 1
我们来分析,在 C++ 中为“文本”函数选择参数类型时该如何取舍:为什么按值传递
std::string
可能会产生隐藏拷贝,
const
std::string
&
与
std::string_view
有什么区别,为什么
std::string_view
通常按值传递,以及哪些操作适合在不分配内存的情况下读取/解析文本。最后,我们会做一个“不拷贝”的命令解析实战,并总结使用
string_view
时的典型错误。
std::span
作为连续数据的视图
C++ SELF
等级 18,
课时 2
我们来讲解 C++23 中的
std::span
,它如何作为连续内存块上的“视图”:它与拥有所有权的容器有何不同,如何通过
const
契约和
std::span<const T>
来表达只读访问,哪些来源可以安全地构造
span
(数组、
std::array
、
std::vector
,以及通过
data()
/
size()
获取的字符串),日常最常用的操作有哪些,以及如何通过
subspan()
在不拷贝的情况下方便地切分数据。最后,我们会列出典型错误以及如何避免它们。
生命周期规则:view
C++ SELF
等级 18,
课时 3
讲解 C++23 中针对 view 类型的重要安全技术:为什么
std::string_view
和
std::span
不拥有内存,对象的生命周期在哪里结束,本地和临时对象会带来哪些陷阱,以及如何设计函数接口(返回
view
还是
std::string
/
std::vector
),以避免产生悬垂引用。
设计签名:string_view vs const std::string&
C++ SELF
等级 18,
课时 4
分析在 C++ 中函数签名如何为所有权与数据修改制定契约:何时选择
std::string_view
,何时更诚实地接受
const
std::string
&
,如何使用
std::span<const T>
为基于范围的算法提供接口,以及 view 类型常见的生命周期错误。最后我们会组装一个小的命令行框架并做一点“基于契约”的小重构。
Please enable JavaScript to continue using this application.