企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
目前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++版本都包含更多的细节和功能,这里仅列出了一些主要的特性和改进。具体使用哪个版本取决于项目需求、编译器支持以及个人偏好。