C++ 版本与标准

在查阅 C++ 资料或配置开发环境时,我们经常会看到 C++98、C++11、C++14、C++17、C++20、C++23 等不同名字。

很多初学的小伙伴看到这么多数字,容易以为它们是好几门不同的语言。其实它们都是同一门 C++ 语言,只是代表在不同年份发布的 “官方标准版本”。

C++ 版本号是什么意思?

C++ 是一门由国际标准化组织(ISO)统一制定规则的编程语言。每隔几年,标准委员会就会对语言语法和标准库做一次扩充与完善,并发布一份新的官方标准。

平时看到的 “C++ 加两位数字”,其实就是按发布年份的后两位来命名的。比如 1998 年的首个国际标准叫 C++98,2011 年的重要升级版叫 C++11,而 C++20 则发布于 2020 年。从 C++11 开始,C++ 保持着每 3 年更新一次的固定节奏。

需要注意的是,新标准并不是把旧版本的语法推翻重来,而是在完整保留原有基础语法的前提下,继续增加更好用、更安全的新特性。也就是说,新版本的 C++ 标准依然兼容以前编写的常规基础代码。

比如在程序里定义一个保存整数的变量,也就是给数据起个名字存起来。早期的 C++98 必须手动写出类型名 int,而 C++11 新增了 auto 关键字,能根据右侧数值自动识别类型。下面看一个简单例子。

示例:传统写法与现代简写

#include <iostream>

int main() {
    int a = 10;     // C++98 起通用写法
    auto b = 20;    // C++11 起自动识别类型
    std::cout << a << "\n";
    std::cout << b << "\n";
    return 0;
}

运行结果如下。

10
20

分析:

int a = 10; 这一句代码表示定义一个整数类型的变量 a,并将 10 赋值给它。这种基础写法从早期的 C++98 到现在的 C++20 都是通用的,无论标准怎么升级,C++ 的基础语法骨架都没有变。

下一行的 auto b = 20; 则是从 C++11 开始支持的现代简写。编译器看到等号右边的 20,就能自动识别出它是一个整数,省去了手动写类型名的步骤。不过要注意,b 在编译阶段依然被固定为整数类型,后面同样不能随便往里面塞入一段文字。

C++ 主要标准版本对比

从 1998 年至今,C++ 先后发布了多个标准版本,各主要版本的发布年份与定位如下表所示。

C++ 主要标准版本
标准版本 发布年份 版本定位与学习建议
C++98 / C++03 1998 / 2003 早期传统标准,奠定了 C++ 语法基础,如今多在维护旧项目或阅读老教材时遇到
C++11 2011 现代 C++ 的起点,新增了自动类型识别、智能指针等大量实用特性
C++14 / C++17 2014 / 2017 在 C++11 基础上做实用扩充,目前不少企业项目以 C++17 作为起步标准
C++20 2020 继 C++11 之后的又一次重要升级,功能成熟稳定,推荐作为学习主线
C++23 2023 较新的现代标准,在 C++20 基础上继续补充标准库实用工具
C++26 2026 新一代标准,主流编译器仍在逐步完善支持,初学阶段简单了解即可

注意 小伙伴们不要把 “C++ 标准版本” 和 “编译器版本” 搞混了。比如我们后面安装的编译器可能显示为 GCC 14 或 GCC 15,这里的 14、15 是编译器软件自身的版本号,并不是说存在 “C++15” 这样的语言标准版本。

C++ 标准版本的选择与指定

面对这么多标准版本,初学者在实际学习和写代码时,重点把握好版本选择与编译参数这两点即可。

1. 推荐的学习版本

既然现在已经有了更新的 C++23 甚至 C++26,为什么我们更推荐选择 C++20 作为学习主线呢?主要有以下 2 个原因:

  • 编译器支持成熟稳定:C++ 标准是由委员会制定的规则文档,实际运行代码还要靠 GCC、Clang、MSVC 等编译器去实现。越新的标准,不同编译器的支持进度往往不一致。C++20 经过多年打磨,主流编译器都已经支持得非常完善,照着敲代码不会遇到 “教程里能跑、自己电脑上报错” 的情况。
  • 完整覆盖现代主流写法:C++20 已经把 C++11、C++14、C++17 以及 C++20 自身最实用、最常见的现代特性全部包含在内。无论是日常项目开发、学校课程还是求职面试,掌握基于 C++20 的现代写法都已经非常够用。

2. 编译时指定标准版本

不同编译器默认开启的 C++ 标准可能不一样,比如部分旧版本默认只开启 C++14 或 C++17。为了确保代码能按统一规则顺利编译,我们可以在编译命令中加上 -std 参数来指定标准版本。

在本地配置开发环境并安装好 g++ 编译器之后,我们就可以在终端里执行下面这条编译命令:

g++ -std=c++20 hello.cpp -o hello.exe

上面命令中间的 -std=c++20 就是用来指定语言标准版本的参数,表示让 g++ 编译器按照 C++20 的规则来编译源文件 hello.cpp。以后如果参与的团队项目要求统一使用 C++17,只需要把这个参数改成 -std=c++17 就可以了。

常见问题

1. 为什么市面上有些老教材或大学课本还在使用 C++98 的写法?

主要是因为部分传统教材编写年份较早,一直没有同步更新。这类教材虽然把变量、循环、函数等基础语法讲清楚了,但往往花大量篇幅讲原始指针和手动管理内存,很少涉及现代标准库。咱们学习时会把底层基础与现代实用写法结合起来,既能应付学校考试,也能对接实际开发。

2. 学会 C++20 之后,以后遇到使用 C++17 或 C++23 的项目能适应吗?

完全可以。不同版本的 C++ 并不是割裂的,日常开发中绝大多数基础语法和标准库工具都是相通的。只要把 C++20 的底子打牢,以后无论项目要求使用 C++17 还是升级到 C++23,只需要花很少的时间了解一下个别版本差异就能快速上手。

上一篇:

下一篇:

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号