C++11和C++20是C++语言发展史上的两个重要里程碑,它们引入了许多新特性,极大地丰富了C++的功能和表达能力。
C++11 的一些值得关注的特性包括:
- 自动类型推导(Auto):允许编译器自动推导变量的类型。
- decltype:用于推导表达式的类型,提供了比auto更灵活的类型推导能力。
- Lambda表达式:允许在需要的地方定义匿名函数对象。
- 智能指针:如
std::unique_ptr
和std::shared_ptr
,简化了资源管理。 - 并发编程支持:引入了线程库,使得并发编程更加容易。
- 正向声明:允许在类定义之前声明它,从而在类的友元声明中使用。
- 范围for循环:提供了一种新的迭代容器的语法。
- 强类型枚举:
enum class
提供了更好的类型安全。 - 右值引用:支持移动语义,提高了性能。
C++20 引入的新特性包括:
- 模块(Modules):提供了一种新的代码组织方式,可以替代头文件。
- 概念(Concepts):一种新的模板编程工具,用于模板参数的约束。
- 范围库(Ranges):提供了一种新的处理数据集合的方式,简化了算法的编写。
- 协程(Coroutines):支持异步编程,允许编写看起来像同步代码的异步逻辑。
- 并发和同步库:增强了对并发编程的支持,包括原子智能指针等。
- Lambda表达式更新:支持更灵活的捕获和模板形式的Lambda表达式。
- 指定初始化(Designated Initializers):类似于C99的特性,简化了对象成员的初始化。
- 三路比较运算符( spaceship operator
<=>
):提供了一种新的比较机制。 - 常量表达式更新:扩展了
constexpr
的功能,允许更多的运行时特性在编译时计算。 - std::format:类似于Python的格式化字符串功能。
- std::span:提供了一种新的非拥有(non-owning)的引用容器或数组的方式。