網友評分: 4.7分
Microsoft Visual C++是一款專業的動態鏈接庫。該軟件不但具有程序框架自動生成、靈活方便的類管理、代碼編寫和界面設計集成交互操作、可開發多種程序等優點,支持大多數C++11特性以及C++ 2015子集的編譯器,讓你輕松運行各種游戲和軟件。
在該版本中,更新了 C++ 編譯器和標準庫,使其對 C++11 的支持得到增強并開始支持某些 C++14 功能。 還包括初步支持 C++17 標準版中預期的某些功能。
此外,該版本修復了 500 多個編譯器 Bug,包括客戶通過 Microsoft Connect 提交的許多 Bug,非常感謝!
語言功能
我們增加了以下新功能,以使編譯器更靠近標準 C++:
可恢復函數 (resume/await)關鍵字 resume 和 await 為異步編程提供語言級的支持,并啟用可恢復函數。 目前,此功能僅適用于 x64 目標。 對于 C+ +17 的建議 [N3858]
泛型(多態)Lambda 表達式現在 Lambda 函數參數類型可指定使用 auto;在此上下文中編譯器將 auto 解釋為此閉包的函數調用運算符是成員函數模板,在 Lambda 表達式中對 auto 的每次使用都對應著截然不同的模板類型參數。
通用的 Lambda 捕獲表達式也稱為初始化捕獲。 現在,任意表達式的結果可分配給 Lambda 捕獲子句中的變量。 這將使 move-only 類型被值捕獲,并使 Lambda 表達式在其閉包對象中定義任意數據成員。
二進制文本現在支持二進制文本。 這些文本將以 0B 或 0b 作為前綴,且僅由數字 0 和 1 組成。
返回類型推斷現在,可推斷普通函數的返回類型,包括帶有多條返回語句的函數以及遞歸函數。 這些函數定義前面可以添加 auto 關鍵字,和帶有結尾返回類型的函數定義一樣,只是省略了結尾返回類型。
decltype(auto) 使用 auto 關鍵字初始化表達式的類型推斷將從表達式中去除 ref 限定符和頂層 cv 限定符。 decltype(auto) 將保留 ref 和 cv 限定符,且現在可在可以使用 auto 的任意位置使用,除非引入推斷或結尾返回類型的函數。
線程安全"神奇"靜態現在可用線程安全的方式來初始化靜態局部變量,而不必進行手動同步。 只有初始化是線程安全的,多線程使用靜態局部變量仍必須手動同步。 通過使用 /Zc:threadSafeInit- 標記來避免依賴于 CRT,可以禁用線程安全靜態功能。
線程本地存儲使用 thread_local 關鍵字聲明應為每個線程創建獨立對象。
noexcept 現在,可以使用 noexcept 運算符來檢查表達式是否可能引發異常。 現在,可以使用 noexcept 說明符來指定函數未引發異常。
內聯命名空間現在可以將命名空間指定為內聯式,以將其內容提升至封閉命名空間。 內聯命名空間可用于創建帶有版本的庫,這些庫默認提供其最新版本,同時仍顯式提供 API 的較低版本。
無限制聯合現在聯合類型可包含使用重要的構造函數的類型。 必須定義這些聯合的構造函數。
新字符類型和 Unicode 文本現在支持 UTF-8、UTF-16 和 UTF-32 格式的字符和字符串文本,并引入了新的字符類型 char16_t 和 char32_t。 字符文本可使用 u8 (UTF-8)、u (UTF-16) 或 U (UTF-32) 作為前綴(如 U'a'),而字符串文本還可使用原始字符串等效項 u8R (UTF-8 raw-string)、uR (UTF-16 raw-string) 或 UR (UTF-32 raw-string) 作為前綴。 通用字符名稱可在 Unicode 文本(如 u'\u00EF'、u8"\u00EF is i" 和 u"\U000000ef is I")中自由使用。
__func__ 預定義的標識符 __func__ 顯式定義為包含封閉函數的非限定和無修飾名稱的字符串。
__restrict 現在 __restrict 可應用于引用。
類型名稱關鍵字。 用戶現在可以在模板參數中編寫 typename 而不是 class 。
全局 void operator delete(void *, std::size_t) noexcept 和 void operator delete[](void *, std::size_t) noexcept 現在可進行重載。
數字分隔符 現在,您可以使用單引號分隔數值文件,以使其更易于閱讀。 例如, int x = 1’000’000;。
文字中的通用字符名 現在,您可以編寫基本的字符,如"A"和換行字符,作為文字中的代碼點。 例如, const char *s = "\u0041\u000A";。
Visual C++ 庫功能
標準庫類型的用戶定義文本 (UDL) 為了方便起見,<chrono>, <string>和<complex> 標頭現在提供 UDL 運算符。 例如,123ms 表示 std::chrono::milliseconds(123),"hello"s 表示 std::string("hello"),且 3.14i 表示 std::complex(0.0, 3.14)。