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++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++ 区别
  • 指针和引用的概念
  • 指针与内存关系
  • 程序编译过程,静态链接库和动态链接库
  • staticconst#define 的用法和区别
  • 内存中的栈和堆分配
  • 面向对象编程
  • 访问控制符 public/protected/private
  • 构造函数 / 析构函数 / 拷贝构造函数
  • 多态
  • 继承、虚继承、菱形继承
  • 虚函数、纯虚函数、虚函数指针、虚函数表
  • new/delete/malloc/free
  • 重载、重写、覆盖
  • 类型转换方式
  • RAII 与 Pimpl 惯用法
  • 内存溢出和内存泄漏
  • STL 标准模板库
  • 迭代器、空间配置器(allocator)
  • 常用容器的特点、用法以及底层实现,比如 vectordequelistsetmapunordered_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_guardstd::unique_lockstd::mutexstd::condition_variable
  • 原子基础类型(如 std::atomic_int
  • std::bind/std::function
  • Lambda 表达式