目前C语言的标准有:C89(ANSI C)、C90、C95、C99(ISO C)、C11(C1x)
目前C++语言的标准有:C++98、C++03(对98小幅修改)、C++11(全面进化)、C++14、C++17
C语言标准的介绍,请参考:C语言标准简介C89(ANSI C)、C99(ISO C)、C11(C1x)
各种C++标准对应的编译器支持情况,请参考官方的对照表:C++ compiler support
简单来分析一下GCC编译器对不同的C++标准的支持情况。
C++17:
gcc7完全支持,gcc6和gcc5部分支持,gcc6支持度当然比gcc5高,gcc4及以下版本不支持。
C++14:
gcc5就可以完全支持,gcc4部分支持,gcc3及以下版本不支持。
C++11:
gcc4.8.1及以上可以完全支持。gcc4.3部分支持,gcc4.3以下版本不支持。
高版本的gcc向下兼容,支持低版本的C++标准。
gcc版本的发布时间:http://gcc.gnu.org/releases.html
VC全名是Microsoft Visual C++是微软出的一个集成的c,c++开发环境,比较经典版本是97年出的 Microsoft Visual C++ 6.0,不过目前最好还是用VS2008以上的版本中的VC了。
VS全名是Microsoft Visual Studio目前已经出到2017了,是很大的一个开发环境,包含很多高级语言的开发环境,VC、VB等,VC只是VS其中的一个开发环境。
vc版本与vs版本对应关系如下所示:
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
C++17:
vs2017基本支持,vs2015部分支持。
C++14:
vs2017就可以完全支持,vs2015基本支持,vs2013部分支持。
C++11:
vs2015及以上可以完全支持。vs2013基本支持,vs2012部分支持,vs2010及以下版本不支持。
VC++每个版本对应的库
123456msvcp、msvcr60、71和80.dll,以及vcomp.dll(不带数字版本号)属于VC++2005版msvcp、msvcr、vcomp90.dll属于 VC++2008版msvcp、msvcr、vcomp100.dll属于VC++2010版 msvcp、msvcr、vcomp110.dll属于VC++2012版 msvcp、msvcr、vcomp120.dll属于VC++2013版 msvcp、msvcr、vcomp140.dll属于VC++2015版
c++11----------visual studio 2012
c++14----------visual studio 2015
c++17----------visual studio 2017
c++20----------visual studio 2019
C++有多个版本,每个版本都有其特定的语法和功能。以下是一些常见的C++版本:
1\. C++98/03:这是最早的C++标准,于1998年发布。它包括了C++的基本特性,如类、继承、多态等。
2\. C++11:这是在2011年发布的C++标准。它引入了一些新特性,如自动类型推断、lambda表达式、智能指针等,以及对并发编程的支持。
3\. C++14:这是在2014年发布的C++标准。它对C++11进行了一些修正和改进,没有引入太多新的特性。
4\. C++17:这是在2017年发布的C++标准。它引入了一些新特性,如结构化绑定、折叠表达式、if语句的初始化等。
5\. C++20:这是在2020年发布的C++标准。它引入了一些重要的新特性,如概念、协程、三向比较运算符等。
需要注意的是,不同编译器对C++标准的支持程度可能有所不同。因此,某些特定的功能可能需要特定的编译器或编译选项才能使用。
# C++11 14 17 20 23进化史
C++11、C++14、C++17、C++20和C++23是C++语言标准的不同版本,它们之间在功能、特性和语法上存在一些区别。以下是对这些版本主要区别的概述:
![](images/c++.jpg)
### C++11
C++11是C++语言的一个重要标准,引入了大量新特性和改进,使C++变得更加易用和强大。主要特性包括:
* **自动类型推导(auto)**:可以根据初始化表达式自动推导变量的类型。
* **统一的初始化语法**:可以使用花括号`{}`来初始化对象,无论是基本类型、数组、类对象还是容器。
* **右值引用和移动语义**:引入了`&&`符号,支持绑定到临时对象(右值),实现了资源的高效转移,避免不必要的拷贝操作。
* **Lambda表达式**:可以在代码中定义匿名函数,简化函数对象的创建和使用。
* **多线程支持**:引入了多线程编程的支持,包括线程、互斥锁、条件变量等。
* **标准库的增强**:包括智能指针、正则表达式库、新的容器类型(如`unordered_map`、`array`)等。
### C++14
C++14是对C++11标准的一个较小但重要的补充和改进,主要特性包括:
* **Lambda初始化捕获**:支持在捕获列表中直接初始化捕获的变量。
* **泛型Lambda表达式**:参数可以使用`auto`关键字进行自动类型推导。
* **constexpr函数的改进**:允许在constexpr函数体内使用更复杂的控制流结构和局部变量声明。
* **废弃标志**`**[[deprecated]]**`:用于标记已弃用的函数、类或其他声明,以在编译时发出警告。
* **线程支持库的扩展**:引入了`std::shared_timed_mutex`和`std::shared_lock`,支持共享(读)锁定和独占(写)锁定。
### C++17
C++17进一步扩展了C++的功能和特性,主要包括:
* **结构化绑定**:允许从元组、结构体或数组等复合类型中直接解包出成员。
* `**if constexpr**`:允许在编译时进行条件编译,提高模板元编程的灵活性。
* **内联变量**:可以直接在头文件中定义全局变量,避免多次定义的问题。
* **Lambda表达式可以捕获**`***this**`:捕获当前对象的拷贝,确保在对象释放后,lambda表达式能安全地调用其成员和方法。
* **标准库的扩充**:新增了`std::variant`、`std::optional`、`std::any`、`std::string_view`等类型。
### C++20
C++20是C++语言发展的一个重要里程碑,引入了许多现代化编程特性,如:
* **概念(Concepts)**:对模板参数进行约束和限制,提高模板编程的易用性和安全性。
* **区间(Ranges)**:统一处理序列操作,如过滤、转换等,简化容器操作。
* **协程(Coroutines)**:简化异步编程模型的工具,使得编写异步代码更加直观和方便。
* **模块系统**:虽然C++20标准中没有完全实现,但为未来的模块系统奠定了基础。
### C++23
C++23是C++语言标准的最新版本(截至当前时间),预计特性包括:
* **增强的模块系统**:进一步完善C++的模块系统,提高编译速度和代码封装性。
* **数学库扩展**:可能包括新的数学函数和算法,以支持更复杂的数学计算。
* **网络库扩展**:可能引入新的网络编程特性,简化网络应用的开发。
需要注意的是,每个C++版本都包含更多的细节和功能,这里仅列出了一些主要的特性和改进。具体使用哪个版本取决于项目需求、编译器支持以及个人偏好。