在这里插入图片描述
在初学 C++ 时,经常听到 C++11,C++14,g++,msvc 等术语,它们之间既有关系,又是指代不同的东西,下面就来简单介绍一些这些术语之间的关系

C++ 标准

C++ 标准就是 C++ 这门语言的规范和规范化的文件,它是有 ISO 这个标准化组织来制定的。所谓 C++ 标准简单可以理解为 C++ 这门语言的语法,语义,函数库等等,就好像我们说的普通话一样,是一种标准

C++ 标准有哪些

C++ 标准主要有 C++98,C++11,C++14,C++17,C++20 以及 C++23。这里的 11,14,… 分别是指 2011,2014 年发布的,而 98 是指 1998 年发布的标准版本,每一次的标准变更都伴随着对 C++ 这门语言引入了比较大的更新(新增,废弃)。如下图所示,历次版本变更的示意图
在这里插入图片描述

查看你正在使用的 C++ 标准

随便新建一个 .cpp 文件,复制一下代码,并执行。

#include <iostream>
using namespace std;

int main()
{
    cout << __cplusplus << endl; // 假设我的 C++ 版本是 199711,对比下面的参数是 C++98
}

对比下列参数即可:

C++ pre-C++98: __cplusplus is 1.
C++98: __cplusplus is 199711L.
C++98 + TR1: This reads as C++98 and there is no way to check that I know of.
C++11: __cplusplus is 201103L.
C++14: __cplusplus is 201402L.
C++17: __cplusplus is 201703L.
C++20: __cplusplus is 202002L.

__cplusplus 是预处理器宏。如果编译单元是使用 C++ 编译器编译的,则定义 __cplusplus 预处理器宏。它的值对应于编译器用来编译编译单元的 C++ 标准。[2]

在编译时,使用下面的命令行语句,可以指定 C++ 标准:g++ -std=c++11 "example.cpp" -o "example.exe",比如我这里就指定了 C++11 为使用的标准

C++ 编译器

正如前面所讲 C++ 的标准是指这门语言的语法,语义和函数库,它类比于我们说的普通话,而编译器则是将 C++ 这门高级语言翻译成机器语言的工具,机器语言就是给你的计算机看的语言,最终就是 0101 这样的二进制数

目前市面上有很多的编译器,如本文开头的图片所示,其中最流行的分别是 GUN 项目下的 g++ 编译器和微软的 MSVC 编译器(Microsoft Visual C++)。在下面的介绍中,我们也着重介绍如何查看这两种编译器的版本

那么 C++ 标准和编译器版本是什么关系呢?编译器本质上也可以理解为对 C++ 标准的实现。打一个比方,比如有一个当下的词汇叫做人工智能,你大脑这个现代词语编译器就能听懂人工智能,但如果你让一个秦朝人来听,那么他大脑里的词语编译器就无法理解人工智能是什么意思

查看你的 gcc,g++ 版本

gcc 是 c 语言的编译器,g++ 全称是 gcc ++,是 C++ 的编译器,当然 g++ 只是一种 C++ 的编译器。而 gcc 和 g++ 这两款编译器都属于 GCC(GNU Compiler Collection)这个项目下的产品

这个比较简单,就是在命令行(如 Linux 下的终端或 Windows 下的 cmd)中输入,gcc -vg++ -v 即可查看。很多 Linux 发行版都默认安装了 g++,例如 Ubuntu,而 Windows 往往没有默认安装 g++,因此若你需要在 Windows 下使用,需要自行安装

C++ 标准与 gcc 编译器的版本的对应关系

  1. C++17:GCC7 完全支持,GCC6 和 GCC5 部分支持,GCC6 支持度当然比 GCC5 高,GCC4 及以下版本不支持
  2. C++14:GCC5 就可以完全支持,GCC4 部分支持,GCC3 及以下版本不支持
  3. C++11:GCC4.8.1 及以上可以完全支持。GCC4.3 部分支持,GCC4.3 以下版本不支持

如果你想查看更详细的支持情况请阅读官方文档

C++ 标准与 Visual studio 的对应关系

Visual Stuido 和 Visual C++ 的关系

  1. Visual studio 是微软的一款集成开发环境的工具(不是 Visual Studio Code),如可以开发 C++ 程序,C# 程序,JavaScript 程序等
  2. Visual C++ 是微软的一款 C++ 集成开发环境的工具,里面集成了 C++ 的编译器,比如大家熟悉的 Visual C++6.0。而现在的 Visual Studio 中集成了 Visual C++,简称 MSVC
  3. 微软对它的 C++ 语言进行了扩充,所以我们会看到有时 Windows 下的 C++ 写法同其它平台的 C++ 有不同

Visual Studio 版本与 C++ 标准的关系

由于 Visual C++ 这个编译器与 Visual Studio 是强相关的,因此一般情况下,我们知道 Visual Studio 的版本就知道了它所支持的 C++ 标准

  1. C++20:vs2022支持
  2. C++17:vs2017基本支持,vs2015部分支持
  3. C++14:vs2017就可以完全支持,vs2015基本支持,vs2013部分支持
  4. C++11:vs2015及以上可以完全支持。vs2013基本支持,vs2012部分支持,vs2010及以下版本不支持

如果你想查看更详细的支持情况请阅读官方文档

Visual Studio 版本与 Visual C++ 的关系

Visual Studio 6 : vc6
Visual Studio 2003 : vc7
Visual Studio 2005 : vc8
Visual Studio 2008 : vc9
Visual Studio 2010 : vc10
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
Visual Studio 2017 : vc15

如果你想查看更详细的支持情况请阅读官方文档

参考

  1. How to determine the version of the C++ standard used by the compiler?
  2. C++ preprocessor macro __cplusplus
  3. VS版本、GCC版本与C++版本的对应关系
  4. 几款好的C/C++编译器(编译器而非IDE)
  5. Relationships between VS ans MSVC version
  6. vs不同版本支持的c++版本和PlatformToolset,及在vs中切换c++版本
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐