AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 46
noexcept — “不通过异常退出”的约定
C++ SELF
等级 46,
课时 0
解析在 C++ 中
noexcept
说明符到底意味着什么:为什么它是一个约定,会在违反时发生什么(调用
std::terminate()
)、为什么像
std::vector<T>
这样的容器特别重视 move 操作上的
noexcept
,以及如何诚实地判断是否可以将函数标记为“不会抛出”。
按值返回与 copy elision(NRVO)
C++ SELF
等级 46,
课时 1
我们来讲解为什么在现代 C++ 中按值返回对象是合理的:在
return
时发生了什么(复制、移动或消除多余操作)、
copy elision
和
NRVO
优化如何工作、为什么在
return
中通常不需要使用
std::move
,以及在教学类型
Buffer
(拥有资源、支持
move
语义、正确的生命周期)上的实践示例。
move 之后的状态:有效,但未指定……
C++ SELF
等级 46,
课时 2
我们来解析 C++ 中 moved-from 对象的“valid but unspecified”合同:为什么在执行
std::move
后不能读取旧数据,但可以安全地销毁对象、给它赋新值并再次移动。以
std::string
为例说明为什么“字符串变为空”不是保证,而只是某些实现的具体行为。然后设计自定义类型
Text
,带上清晰的不变量(
nullptr
/
0
),讨论“半空”状态、允许的操作表以及典型错误。
返回对局部变量的引用
C++ SELF
等级 46,
课时 3
我们来拆解 C++ 中最常见的
UB
来源之一:当你试图从函数返回指向局部对象的
T
*
或
T
&
时,
dangling reference
和
dangling pointer
是怎样产生的。我们会理解局部变量在
return
时的生命周期,看看反例,选择安全的默认方案(按值返回),并固定几种正确的替代方式:
std::optional<T>
,以及在契约明确的前提下返回指向容器元素的指针。
临时对象的生命周期
C++ SELF
等级 46,
课时 4
我们来解析在 C++ 中什么是临时对象(temporary)、“完整表达式”是什么意思以及为什么临时对象通常只活到
;
。通过
std::string
和引用的示例展示什么时候通过
const
T
&
会延长生命周期,为什么不能从
return
返回对临时对象的引用,以及在“优化”情况下如何避免得到
dangling reference
。
Please enable JavaScript to continue using this application.