Visual C++ 2015運(yùn)行庫(kù)包括C運(yùn)行時(shí)庫(kù)(CRT),標(biāo)準(zhǔn)C + +和MFC,C + +,和OpenMP。開(kāi)發(fā)的Visual C++應(yīng)用程序使用動(dòng)態(tài)鏈接到Visual Studio 2015和Visual C + +庫(kù)。具有集成開(kāi)發(fā)環(huán)境,可提供編輯C語(yǔ)言,C++以及C++/CLI等編程語(yǔ)言。VC++整合了便利的除錯(cuò)工具,特別是整合了微軟視窗程式設(shè)計(jì)(Windows API)、三維動(dòng)畫(huà)DirectX API,Microsoft .NET框架。
Visual C++
在該版本中,更新了 C++ 編譯器和標(biāo)準(zhǔn)庫(kù),使其對(duì) C++11 的支持得到增強(qiáng)并開(kāi)始支持某些 C++14 功能。 還包括初步支持 C++17 標(biāo)準(zhǔn)版中預(yù)期的某些功能。
此外,該版本修復(fù)了 500 多個(gè)編譯器 Bug,包括客戶(hù)通過(guò) Microsoft Connect 提交的許多 Bug,非常感謝!
語(yǔ)言功能
我們?cè)黾恿艘韵滦鹿δ埽允咕幾g器更靠近標(biāo)準(zhǔn) C++:
可恢復(fù)函數(shù) (resume/await)關(guān)鍵字 resume 和 await 為異步編程提供語(yǔ)言級(jí)的支持,并啟用可恢復(fù)函數(shù)。 目前,此功能僅適用于 x64 目標(biāo)。 對(duì)于 C+ +17 的建議 [N3858]
泛型(多態(tài))Lambda 表達(dá)式現(xiàn)在 Lambda 函數(shù)參數(shù)類(lèi)型可指定使用 auto;在此上下文中編譯器將 auto 解釋為此閉包的函數(shù)調(diào)用運(yùn)算符是成員函數(shù)模板,在 Lambda 表達(dá)式中對(duì) auto 的每次使用都對(duì)應(yīng)著截然不同的模板類(lèi)型參數(shù)。 C++14
通用的 Lambda 捕獲表達(dá)式也稱(chēng)為初始化捕獲。 現(xiàn)在,任意表達(dá)式的結(jié)果可分配給 Lambda 捕獲子句中的變量。 這將使 move-only 類(lèi)型被值捕獲,并使 Lambda 表達(dá)式在其閉包對(duì)象中定義任意數(shù)據(jù)成員。 C++14
二進(jìn)制文本現(xiàn)在支持二進(jìn)制文本。 這些文本將以 0B 或 0b 作為前綴,且僅由數(shù)字 0 和 1 組成。 C++14
返回類(lèi)型推斷現(xiàn)在,可推斷普通函數(shù)的返回類(lèi)型,包括帶有多條返回語(yǔ)句的函數(shù)以及遞歸函數(shù)。 這些函數(shù)定義前面可以添加 auto 關(guān)鍵字,和帶有結(jié)尾返回類(lèi)型的函數(shù)定義一樣,只是省略了結(jié)尾返回類(lèi)型。 C++14
decltype(auto) 使用 auto 關(guān)鍵字初始化表達(dá)式的類(lèi)型推斷將從表達(dá)式中去除 ref 限定符和頂層 cv 限定符。 decltype(auto) 將保留 ref 和 cv 限定符,且現(xiàn)在可在可以使用 auto 的任意位置使用,除非引入推斷或結(jié)尾返回類(lèi)型的函數(shù)。 C++14
隱式生成 Move 特殊成員函數(shù)現(xiàn)在,當(dāng)條件允許時(shí),將隱式生成 Move 構(gòu)造函數(shù)和 Move 賦值運(yùn)算符,從而使編譯器與 C++11 rvalue 引用完全一致。 C+ +11
繼承構(gòu)造函數(shù)現(xiàn)在,派生的類(lèi)可以通過(guò)在其定義中包含使用 Base::Base; 的語(yǔ)句來(lái)指定它將繼承其基類(lèi) Base 的構(gòu)造函數(shù)。 派生類(lèi)只能繼承其基類(lèi)的所有構(gòu)造函數(shù),無(wú)法只繼承特定的基礎(chǔ)構(gòu)造函數(shù)。 派生類(lèi)無(wú)法從多個(gè)具有相同簽名的構(gòu)造函數(shù)的基類(lèi)進(jìn)行繼承,也無(wú)法定義與其任何繼承構(gòu)造函數(shù)簽名相同的構(gòu)造函數(shù)。 C++11
對(duì)齊方式查詢(xún)和控制變量的對(duì)齊方式可通過(guò)使用 alignof() 運(yùn)算符進(jìn)行查詢(xún),并使用 alignas() 說(shuō)明符進(jìn)行控制。 alignof() 返回必須分配類(lèi)型實(shí)例的字節(jié)邊界;對(duì)于引用,它返回引用類(lèi)型的對(duì)齊方式;對(duì)于數(shù)組,它返回元素類(lèi)型的對(duì)齊方式。 alignas() 控制變量的對(duì)齊方式;它使用常量或類(lèi)型,其中類(lèi)型是 alignas(alignof(type)) 的簡(jiǎn)寫(xiě)形式。 C++11
擴(kuò)展的 sizeof 現(xiàn)在,通過(guò)使用 sizeof(),無(wú)需類(lèi)或結(jié)構(gòu)的實(shí)例,即可確定類(lèi)或結(jié)構(gòu)成員變量的大小。 C++11
constexpr 部分支持 C++11 constexpr。 C++11(部分支持)
用戶(hù)定義的文本 (UDL) 現(xiàn)在,有意義的后綴可以附加到數(shù)字和字符串文本,以便賦予它們特定的語(yǔ)義。 編譯器將后綴文本解釋為調(diào)用相應(yīng)的 UDL 運(yùn)算符。 C++11
線(xiàn)程安全"神奇"靜態(tài)現(xiàn)在可用線(xiàn)程安全的方式來(lái)初始化靜態(tài)局部變量,而不必進(jìn)行手動(dòng)同步。 只有初始化是線(xiàn)程安全的,多線(xiàn)程使用靜態(tài)局部變量仍必須手動(dòng)同步。 通過(guò)使用 /Zc:threadSafeInit- 標(biāo)記來(lái)避免依賴(lài)于 CRT,可以禁用線(xiàn)程安全靜態(tài)功能。 C++11
線(xiàn)程本地存儲(chǔ)使用 thread_local 關(guān)鍵字聲明應(yīng)為每個(gè)線(xiàn)程創(chuàng)建獨(dú)立對(duì)象。 C++11
noexcept 現(xiàn)在,可以使用 noexcept 運(yùn)算符來(lái)檢查表達(dá)式是否可能引發(fā)異常。 現(xiàn)在,可以使用 noexcept 說(shuō)明符來(lái)指定函數(shù)未引發(fā)異常。 C++11
內(nèi)聯(lián)命名空間現(xiàn)在可以將命名空間指定為內(nèi)聯(lián)式,以將其內(nèi)容提升至封閉命名空間。 內(nèi)聯(lián)命名空間可用于創(chuàng)建帶有版本的庫(kù),這些庫(kù)默認(rèn)提供其最新版本,同時(shí)仍顯式提供 API 的較低版本。 C++11
無(wú)限制聯(lián)合現(xiàn)在聯(lián)合類(lèi)型可包含使用重要的構(gòu)造函數(shù)的類(lèi)型。 必須定義這些聯(lián)合的構(gòu)造函數(shù)。 C++11
新字符類(lèi)型和 Unicode 文本現(xiàn)在支持 UTF-8、UTF-16 和 UTF-32 格式的字符和字符串文本,并引入了新的字符類(lèi)型 char16_t 和 char32_t。 字符文本可使用 u8 (UTF-8)、u (UTF-16) 或 U (UTF-32) 作為前綴(如 U'a'),而字符串文本還可使用原始字符串等效項(xiàng) u8R (UTF-8 raw-string)、uR (UTF-16 raw-string) 或 UR (UTF-32 raw-string) 作為前綴。 通用字符名稱(chēng)可在 Unicode 文本(如 u'\u00EF'、u8"\u00EF is i" 和 u"\U000000ef is I")中自由使用。 C++11
__func__ 預(yù)定義的標(biāo)識(shí)符 __func__ 顯式定義為包含封閉函數(shù)的非限定和無(wú)修飾名稱(chēng)的字符串。 C++11
__restrict 現(xiàn)在 __restrict 可應(yīng)用于引用。
類(lèi)型名稱(chēng)關(guān)鍵字。 用戶(hù)現(xiàn)在可以在模板參數(shù)中編寫(xiě) typename 而不是 class 。C++14
全局 void operator delete(void *, std::size_t) noexcept 和 void operator delete[](void *, std::size_t) noexcept 現(xiàn)在可進(jìn)行重載。 C++14
數(shù)字分隔符 現(xiàn)在,您可以使用單引號(hào)分隔數(shù)值文件,以使其更易于閱讀。 例如, int x = 1’000’000;。 C++14
文字中的通用字符名 現(xiàn)在,您可以編寫(xiě)基本的字符,如"A"和換行字符,作為文字中的代碼點(diǎn)。 例如, const char *s = "\u0041\u000A";。 C++11
Visual C++ 庫(kù)功能
標(biāo)準(zhǔn)庫(kù)類(lèi)型的用戶(hù)定義文本 (UDL) 為了方便起見(jiàn),<chrono>, <string>和<complex> 標(biāo)頭現(xiàn)在提供 UDL 運(yùn)算符。 例如,123ms 表示 std::chrono::milliseconds(123),"hello"s 表示 std::string("hello"),且 3.14i 表示 std::complex(0.0, 3.14)。
Null 前向迭代器現(xiàn)在標(biāo)準(zhǔn)庫(kù)允許創(chuàng)建不引用容器實(shí)例的前向迭代器。 這些迭代器都進(jìn)行了值初始化,且對(duì)于特定容器類(lèi)型來(lái)說(shuō)相等。 未定義值已初始化的迭代器與值未初始化的迭代器之間的比較。 C++14
quoted() 現(xiàn)在標(biāo)準(zhǔn)庫(kù)支持 quoted() 函數(shù)以大大簡(jiǎn)化引用字符串值和 I/O 的使用。 通過(guò) quoted() 將整個(gè)引用字符串看作是單個(gè)實(shí)體(如 I/O 流中的非空格字符字符串);此外,還將通過(guò) I/O 操作保留轉(zhuǎn)義序列。 C++14
異類(lèi)關(guān)聯(lián)查找現(xiàn)在標(biāo)準(zhǔn)庫(kù)支持關(guān)聯(lián)容器的異類(lèi)查找函數(shù)。 只要類(lèi)型相當(dāng)于 key_type,此類(lèi)函數(shù)就能按照類(lèi)型而不是 key_type 進(jìn)行查找。 C++14
編譯時(shí)整數(shù)序列現(xiàn)在標(biāo)準(zhǔn)庫(kù)支持表示整數(shù)值序列的 integer_sequence 類(lèi)型,該序列可在編譯時(shí)進(jìn)行評(píng)估,以便使參數(shù)包的使用更為輕松,并簡(jiǎn)化某些模板編程模式。 C++14
exchange() 現(xiàn)在標(biāo)準(zhǔn)庫(kù)支持 std::exchange() 實(shí)用工具函數(shù)將新值分配到對(duì)象并返回其舊值。 對(duì)于復(fù)雜類(lèi)型,如果 Move 構(gòu)造函數(shù)可用,則 exchange() 不必復(fù)制舊值,如果 Move 構(gòu)造函數(shù)為臨時(shí)或已移動(dòng),則 exchange() 不必復(fù)制新值,且將利用轉(zhuǎn)換賦值運(yùn)算符接受任何類(lèi)型作為新值。 C++14
雙范圍 equal(), is_permutation(), mismatch() 現(xiàn)在標(biāo)準(zhǔn)庫(kù)支持接受兩個(gè)范圍的 std::equal()、std::is_permutation() 和 std::mismatch() 的重載。 這些重載將檢查兩個(gè)序列是否具有相同長(zhǎng)度,從而不再需要調(diào)用代碼;對(duì)于不支持隨機(jī)迭代器要求的序列,這些重載將在比較元素的同時(shí)檢查長(zhǎng)度,這種方式更為有效。 C++14
get<T>() 標(biāo)準(zhǔn)庫(kù)現(xiàn)在支持 get<T>() 模板函數(shù)以允許元組元素按其類(lèi)型進(jìn)行尋址。 如果元組中包含屬于同一類(lèi)型 get<T>() 的兩個(gè)或多個(gè)元素,則該元組將無(wú)法按該類(lèi)型進(jìn)行尋址,但其他唯一類(lèi)型的元素仍可進(jìn)行尋址。 C++14
tuple_element_t 標(biāo)準(zhǔn)庫(kù)現(xiàn)在支持 tuple_element_t<I, T> 類(lèi)型別名,這一別名是類(lèi)型名稱(chēng) tuple_element<I, T>::type 的別名。 這為模板程序員提供了一些便利,類(lèi)似于<type_traits>. C++14
文件系統(tǒng)"V3"技術(shù)規(guī)范所包含的文件系統(tǒng)技術(shù)規(guī)范的實(shí)施已更新至規(guī)范版本 3。 [N3940]
最小的分配器現(xiàn)在標(biāo)準(zhǔn)庫(kù)在整個(gè)庫(kù)中支持最小分配器接口;重要修復(fù)包括 std::function、shared_ptr、allocate_shared() 和 basic_string。 C++11
<chrono> 已修復(fù) chrono 類(lèi)型 high_resolution_clock 和 steady_clock。 C++11
Visual c++ 2015軟件功能特點(diǎn)
Visual C++2015建立在早期版本引入的驚人進(jìn)步,提供了成熟的、支持大多數(shù)C++11特性以及C++ 2015子集的編譯器。你或許會(huì)懷疑編譯器支持的完整程度,公正地說(shuō),我認(rèn)為他能支持大部分重要的語(yǔ)言特性,支持現(xiàn)代C++將會(huì)迎來(lái)windows 程序庫(kù)開(kāi)發(fā)一片新的天地。這才是關(guān)鍵。只要編譯器支持一個(gè)高效優(yōu)雅的庫(kù)的開(kāi)發(fā)環(huán)境,開(kāi)發(fā)者就能構(gòu)建偉大的app和組件。
Microsoft Visual C++是Microsoft公司推出的開(kāi)發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類(lèi)管理、代碼編寫(xiě)和界面設(shè)計(jì)集成交互操作、可開(kāi)發(fā)多種程序等優(yōu)點(diǎn),而且通過(guò)簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫(kù)接口、OLE2,WinSock網(wǎng)絡(luò)、3D控制界面。
它以擁有“語(yǔ)法高亮”,IntelliSense(自動(dòng)完成功能)以及高級(jí)除錯(cuò)功能而著稱(chēng)。比如,它允許用戶(hù)進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶(hù)在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加連結(jié)著稱(chēng)。這些特征明顯縮短程式編輯、編譯及連結(jié)花費(fèi)的時(shí)間,在大型軟件計(jì)劃上尤其顯著.