目前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++語言標準的不同版本,它們之間在功能、特性和語法上存在一些區別。以下是對這些版本主要區別的概述:

### 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++版本都包含更多的細節和功能,這里僅列出了一些主要的特性和改進。具體使用哪個版本取決于項目需求、編譯器支持以及個人偏好。