AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 58
模板中的 static_assert
C++ SELF
等级 58,
课时 0
解析如何在 C++ 模板中使用
static_assert
,以便不要得到一大堆杂乱无章的错误信息,而是得到一个清晰可读的原因:到底在哪儿违反了契约以及对类型有什么期望。我们会讨论检查何时触发(在实例化时)、为什么在模板中写
static_assert
(
false
, ...) 很危险、如何使用技巧
always_false_v<T>
、在哪里放置检查更合适,以及如何将
concept
/
requires
与友好的诊断信息结合使用。
SFINAE vs concepts: 为什么更推荐 concepts
C++ SELF
等级 58,
课时 1
讲解 C++ 如何“筛除”不合适的模板:通过
SFINAE
(当替换出错时重载消失)以及通过
concepts
/
requires
(将契约直接写在签名中可见)。比较可读性、编译器错误质量和重载选择,然后为数字、字符串和范围(
std::ranges::range
)以 C++20/23 风格实现一个实用例子
edu::pretty_print
。
迭代器类别: input / forward / bidirectional / random-access
C++ SELF
等级 58,
课时 2
我们来解析 STL 中迭代器的“能力阶梯”:
input
、
forward
、
bidirectional
和
random-access
有何不同,哪些操作是有保证的(
++
、
--
、
+
、
[]
、迭代器的差值),为什么区间几乎总是用
[
first
,
last
)
表示,以及如何选择像
std::advance
这样的通用工具,而不是对容器做错误假设(例如
vector
vs
map
)。
iterator
vs
const_iterator
— 安全访问
C++ SELF
等级 58,
课时 3
解析为什么在 C++ 中需要
const_iterator
以及方法
cbegin()
/
cend()
,它们如何把“只读意图”固定为可检查的规则,并将意外修改变成编译错误。比较
begin()
/
end()
与
cbegin()
/
cend()
的行为,看看与算法(
std::find_if
)的交互,以及通过
auto
、
auto&
和
const auto&
在
range-for
中选择访问模式。
Inserter:back_inserter / inserter 以及它们的用途
C++ SELF
等级 58,
课时 4
解析 STL 算法如何通过“输出迭代器”写入结果,以及为什么对空容器写入
dst
.
begin()
会带来问题。学习如何通过
std
::
back_inserter
(通过
push_back()
在末尾插入)和
std
::
inserter
(对
set
/
map
使用
insert()
插入)将容器连接到算法,并区分
reserve()
与
resize()
的差别,分析常见错误。
Please enable JavaScript to continue using this application.