C++各个版本

C++11

C++11是一个重要的C++标准版本,于2011年发布。C++11带来了许多重要的改进,包括:

  • 智能指针:引入了shared_ptr和unique_ptr等智能指针,用于更好地管理动态内存分配。
  • 新的循环语句:引入了for循环中的范围语法,以更简洁的方式遍历容器。
  • 初始化列表:允许使用初始化列表来初始化数组和结构体等数据结构。
  • Lambda表达式:允许在代码中直接创建匿名函数。
  • 多线程:引入了多线程库,用于简化多线程编程。

C++14

C++14:是C++11的一个小范围修订版本,于2014年发布,主要包括:

  • 增加了对可变参数的支持。
  • 增加了对类型推导的支持。
  • 提高了constexpr函数的限制。

C++17

C++17:是C++14的一个较大范围修订版本,于2017年发布,其中一些重要的改进包括:

  • 增加了新的文件系统库。
  • 支持了构造函数的默认参数。
  • 支持了结构体包含,简化了结构体的初始化。
  • 增加了对并行编程的支持。

C++20

C++20:是C++17的一个较大范围修订版本,于2020年发布,其中一些重要的改进包括:

  • 引入了模板参数推导。
  • 引入了协同程序,以简化异步编程。
  • 引入了模板类型推导,以简化模板编程。
  • 支持了关键字import,以简化模块的导入。

查看自己的编译器支持C++哪个版本

(浪潮服务器ubuntu20.04 gcc9.4.0)

  • 例如,检查是否支持C++11
g++ -std=c++11 -E - < /dev/null

这行代码是使用g++编译器来编译一段简单的C++代码,以检查您的系统是否支持C++11。
其中,-std=c++11选项告诉编译器使用C++11标准编译代码。
-E选项告诉编译器只进行预处理,而不进行编译和链接步骤。
最后,- < /dev/null表示将标准输入重定向到/dev/null,以便编译器不必读取任何输入。
如果命令行没有输出(或者只输出了警告信息),则说明您的系统支持C++11。如果输出了错误信息,则说明您的系统不支持C++11。

在这里插入图片描述

  • 检查是否支持C++14
g++ -std=c++14 -E - < /dev/null

在这里插入图片描述

  • 检查是否支持C++17
g++ -std=c++17 -E - < /dev/null

在这里插入图片描述

  • 检查是否支持C++20(注意20要写成2a)
g++ -std=c++2a -E - < /dev/null

在这里插入图片描述

上面都是支持情况的打印,如果不支持,会提示什么呢?

(136盒子 ubuntu16.04 gcc5.4.0)
在这里插入图片描述

如图,这个环境不支持C++20

注意:编译时不指定g++版本,默认使用老版本编译(存疑)

如果在编译时不指定C++的版本,那么g++编译器会使用默认的C++版本。
一般情况下,默认的C++版本可能是比较老的版本,例如C++98或C++03。
因此,如果需要使用新的C++特性,比如C++11或C++14,最好明确指定版本。

但是具体默认使用哪个老版本编译,我一时半会找不到查看的方法。。。。

20250619:Ubuntu 发行版、GCC/g++ 版本与 C++ 标准支持对照表

以下是 Ubuntu 各发行版本默认的 GCC/g++ 版本及其对 C++ 标准的支持情况表,结合了官方资料和社区实践整理而成:

Ubuntu 版本 默认 GCC/g++ 版本 支持的 C++ 标准 是否需手动安装更高版本 编译建议
Ubuntu 18.04 LTS (Bionic Beaver) GCC 7.5 / g++ 7.5 ✅ C++11/14/17 (部分支持) ⚠️ 需手动安装 GCC 8+ sudo apt install gcc-8 g++-8
Ubuntu 20.04 LTS (Focal Fossa) GCC 9.3 / g++ 9.3 ✅ C++11/14/17/20 (部分支持) ⚠️ 需手动安装 GCC 10+ sudo apt install gcc-10 g++-10
Ubuntu 22.04 LTS (Jammy Jellyfish) GCC 11.2 / g++ 11.2 ✅ C++11/14/17/20 (完整支持) ✅ 默认支持 C++23 (部分) g++ -std=c++23 your_code.cpp
Ubuntu 23.04 (Lunar Lobster) GCC 12.2 / g++ 12.2 ✅ C++11/14/17/20/23 (部分支持) ⚠️ 需手动安装 GCC 13+ sudo apt install gcc-13 g++-13
Ubuntu 23.10 (Mantic Minotaur) GCC 13.2 / g++ 13.2 ✅ C++11/14/17/20/23 (部分支持) ⚠️ 需手动安装 GCC 14+ sudo apt install gcc-14 g++-14
Ubuntu 24.04 LTS (Noble Numbat) GCC 13.2 / g++ 13.2 ✅ C++11/14/17/20/23 (部分支持) ⚠️ 需手动安装 GCC 14+ sudo apt install gcc-14 g++-14

详细说明

1. 默认 GCC/g++ 版本

  • Ubuntu 18.04 LTS:默认安装 GCC 7.5,支持 C++11/14 基础特性。
  • Ubuntu 20.04 LTS:默认安装 GCC 9.3,支持 C++17 完整特性。
  • Ubuntu 22.04 LTS:默认安装 GCC 11.2,支持 C++20 完整特性。
  • Ubuntu 23.04/23.10/24.04:默认安装 GCC 13.2,支持 C++23 部分特性。

2. C++ 标准支持

  • C++11/14/17:所有版本均默认支持。
  • C++20
    • Ubuntu 20.04:需手动安装 GCC 10+。
    • Ubuntu 22.04+:默认支持。
  • C++23
    • Ubuntu 22.04+:需手动安装 GCC 13+。
    • Ubuntu 24.04:默认支持部分特性(如 std::printconstinit 等)。

3. 手动安装更高版本 GCC

  • 通过 PPA 安装
    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt update
    sudo apt install gcc-11 g++-11  # 例如安装 GCC 11
    
  • 切换默认版本
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110
    sudo update-alternatives --config gcc  # 选择默认版本
    

4. 编译建议

  • 启用特定标准:使用 -std=c++XX 显式指定标准(如 -std=c++20)。
  • 检查当前版本
    g++ --version
    
  • 查询支持特性
    g++ -dM -E -x c++ /dev/null | grep __cplusplus  # 查看当前默认标准
    

推荐实践

需求 推荐 Ubuntu 版本 理由
C++17 项目 Ubuntu 20.04+ 默认支持 C++17 完整特性。
C++20 项目 Ubuntu 22.04+ 默认支持 C++20 完整特性。
C++23 项目 Ubuntu 24.04+ 默认支持 C++23 部分特性,需手动安装 GCC 14+ 以获得完整支持。

注意事项

  1. LTS 版本稳定性

    • Ubuntu 20.04、22.04、24.04 是长期支持(LTS)版本,适合生产环境。
    • 非 LTS 版本(如 23.04/23.10)更新频繁,适合开发测试。
  2. GCC 版本与内核兼容性

    • 新版本 GCC 可能引入 ABI 变化,需确保与系统库兼容。
  3. 源码编译安装

    • 若需最新 GCC 版本(如 GCC 14+),可从 GCC 官网 下载源码编译安装。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐