AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 56
实例化——模板错误看起来很吓人
C++ SELF
等级 56,
课时 0
我们来弄清楚,为什么 C++ 中的模板“不会立即检查”:什么是实例化,为什么错误会在使用时出现,如何阅读编译器的长报错信息(替换链、
[with T = ...]
、“no match for operator...”),以及如何把“模板长卷”变成一份清晰的类型要求列表。最后还有一个实践示例:通用打印
std::vector<T>
,以及为什么你需要为自己的
Task
定义
operator<<
。
在哪里放模板 — 头文件和与 ODR 的关系
C++ SELF
等级 56,
课时 1
我们来分析为什么在 C++ 中模板的定义几乎总是放在头文件:分离编译模型、按使用点实例化、典型的链接错误
undefined reference
,以及这一切如何与
ODR
相关。另有头文件卫生(
#pragma once
/ include guards)以及通过
.inl
/
.tpp
分离实现的实用方法。
auto
根据表达式推导类型 — 基本规则
C++ SELF
等级 56,
课时 2
我们来解析在 C++ 中通过
auto
声明变量时类型推导如何工作:为什么必须提供初始值,形式为
auto
x
=
expr
的写法为何表现为“按值创建副本”,在推导时会丢失哪些信息(顶层
const
和未含
&
的引用语义),以及为什么在与标准库(例如
size()
、
find()
、迭代器和算法)搭配时
auto
尤其有用。最后给出典型错误和关于代码可读性的实用建议。
auto& / const auto& — 如何不丢失 const
C++ SELF
等级 56,
课时 3
我们分析为什么普通的
auto
经常会执行拷贝并“去除”
const
,以及如何在
auto
、
auto
&
和
const
auto
&
之间正确地做出选择。 通过
std::string
、
std::vector
和小型示例程序
TaskBox
,我们将看到 range-for 中哪里会产生多余的拷贝,为什么非常量引用不能绑定到临时对象,以及初学者最常犯的错误。
decltype 与 decltype(auto)
C++ SELF
等级 56,
课时 4
我们来分析即便你已经在积极使用
auto
,为什么在 C++ 中仍然需要
decltype
:如何“字面上保持表达式的类型”,不丢失
const
和引用性(
&
),为什么
decltype
(x) 和
decltype
((x)) 是不同的,及
decltype
(
auto
) 如何帮助编写正确且高效的
return
而不产生多余的拷贝。
Please enable JavaScript to continue using this application.