C++ 标准各个版本介绍
前言
学习资源
Modern C++
什么是 Modern C++
C++11 标准是 C++ 语言发展史上具有里程碑意义的一个版本,通常将 C++11 及以后的 C++14、C++17、C++20 等标准称之为 Modern C++ 标准,使用这个标准引入的新增 C++ 特性称之为 Modern C++,而 C++11 之前的 C++98 和 C++03 标准则不是。
- Modern C++ 主要改进了之前的 C++ 98/03 存在的两大问题:
- 废弃了 C++98/03 标准中一些不实用的语法和库(如
std::auto_ptr
),改进或者增强了 C++98/03 标准中一些语法元素的用法(如auto
关键字、统一类的初始化列表语法),新增了一些其他编程语言早已经支持的关键字和语法(如final
关键字、=default
语法、=delete
语法) - 开始在语法和自带的标准库的层面上增加对操作系统的功能的支持,比如多线程库(
std::thread
)、时间库(std::chrono
)。之前很多功能的实现,C++ 语言本身是无法支持的,必须依赖使用原生的操作系统的 API 函数,导致开发者需要编写大量平台相关的代码。
- 废弃了 C++98/03 标准中一些不实用的语法和库(如
主流编译器的支持程度
变化最大的标准是 C++11,虽然后来又产生了 C++14、C++17 以及 C++20 标准,但它们都是对 C++11 作小范围的修改和扩展,其主要内容还是继续完善一些特性和进一步提高一些标准库的性能。由于 C++11 新增了大量方便开发的功能与特性,支持 C++11 标准的编译器(如 VC++12、g++4.8)一经发布,立即被广大开发者和使用 C++ 的企业广泛采用。
- 各个编译器对于 C++11/14/17 语法特性和标准库的支持情况
- 对于 MSVC 编译器,支持 C++11 新标准的最低版本是 VC++12(随 Visual Studio 2013 一起发布,Visual Studio 以下简称 VS),VS2015 支持部分 C++14 特性,VS2017 完美支持 C++14 和部分 C++17 特性,VS2019 完美支持 C++17 多数语言特性。
- 对于 gcc/g++ 编译器,支持 C++11 新标准的最低版本是 gcc/g++4.8,支持 C++14 是 gcc/g++4.9,gcc/g++7.3 完美支持 C++17 大多数语言特性。
C++ 标准的内容
C++98/03 的内容
若希望系统地学习 C++98/03 中的基本知识,需要逐个掌握但不局限于:
- C 和 C++ 区别
- 指针和引用的概念
- 指针与内存关系
- 程序编译过程,静态链接库和动态链接库
static
、const
、#define
的用法和区别- 内存中的栈和堆分配
- 面向对象编程
- 访问控制符
public
/protected
/private
- 构造函数 / 析构函数 / 拷贝构造函数
- 多态
- 继承、虚继承、菱形继承
- 虚函数、纯虚函数、虚函数指针、虚函数表
new
/delete
/malloc
/free
- 重载、重写、覆盖
- 类型转换方式
- RAII 与 Pimpl 惯用法
- 内存溢出和内存泄漏
- STL 标准模板库
- 迭代器、空间配置器(allocator)
- 常用容器的特点、用法以及底层实现,比如
vector
、deque
、list
、set
、map
、unordered_map
Modern C++ 的内容
在 Modern C++ 中,由于 C++11/14/17 新标准已经成为主流,因此要熟悉新标准常用的语法与新功能,包括但不限于:
- 左值引用、右值引用、移动语义(
std::move
)、完美转发(std::forward
) - 统一的类成员初始化语法与
std::initializer_list
- 注解标签(
attributes
) final
/override
/=default
/=delete
语法auto
关键字Range-based for
循环语法- 智能指针类
- 结构化绑定
- STL 容器新增的实用方法
- 多线程库(
std::thread
) - 线程局部存储
thread_local
- 线程同步原语
std::lock_guard
、std::unique_lock
、std::mutex
、std::condition_variable
- 原子基础类型(如
std::atomic_int
) std::bind
/std::function
- Lambda 表达式