现代C++导读(一)
2024/3/13大约 2 分钟
引言
今年是 2024 年 3 月,距离 C++11 标准提出(ISO/IEC 14882:2011)已经过去了 12 年半,距离 C++20 标准提出(ISO/IEC 14882:2020)也已经过去了两年,GCC5.0 已经默认采用了 C++11 标准,KDE Plasma 在 2020 年也在展望使用 C++20。在 C++11 标准出现后,Modern C++也变成了 C++11 以后 C++的代称。但是,在很多项目和 OI 中,却仍然在使用 C++98 这一个古老,落后而又“丑陋”的标准。因此,本文将从一个实用主义的角度详细阐述现代 C++。
本文将分为两个章节,分别是语言特性和库特性。以下部分不只局限于 C++11,也会包含之前标准的一部分内容,但是可能很方便没有被广泛使用。以下是语言特性部分。
ADT*
ADT,全称 Abstract Data Type,抽象数据类型。ADT 是介于在传统 C 结构体和面向对象模型之间的一个综合。相比传统 C 结构体,它允许有自己的一些方法(也就是成员函数)(可能有人很奇怪,struct 难道内部不能定义函数吗,其实这是因为我们常年在写 C++,在传统 C 当中 struct 内是不允许定义函数的,只能外部定义 struct 的一些方法),也允许访问权限控制;但是相比面向对象模型,他却并没有用到继承多态和模板多态。
ADT 的构建,有一个蛮重要的点就是构造函数。事实上,在很多 OI 选手当中,并不会使用构造函数,甚至很少使用 ADT 这一结构。但是,事实上,ADT 在很多地方能够大大简化代码,减少我们的工作量。
template 入门*
auto
constexpr
nullptr
lambda expression
range-based loop
众所周知,
decltype
Notes & References
标*的代表该部分不属于 C++11 内容。