Visual C++ 2010 的新功能
本文件介紹 Visual Studio 2010 中 Visual C++ 的新功能及增強功能。
Visual C++ 編譯器和連結器
auto 關鍵字
auto 關鍵字有新的用途。 請使用 auto 關鍵字的預設意義來宣告變數,其型別將由變數宣告中的初始設定運算式來推斷。 /Zc:auto 編譯器選項會相應叫用 auto 關鍵字的新意義或舊意義。
decltype 型別規範
decltype 型別規範會傳回指定之運算式的型別。 使用 decltype 型別規範與 auto 關鍵字組合可宣告複雜的型別,或宣告只有編譯器才知道的型別。 例如,使用這個組合來宣告其傳回型別視樣板引數而定的樣板函式, 或是宣告會呼叫其他函式再傳回所呼叫函式之型別的樣板函式。
Lambda 運算式
Lambda 函式具有函式主體但沒有名稱。 Lambda 函式結合了函式指標和函式物件的最佳特性。
請將 Lambda 函式本身當做樣板函式參數而非函式物件使用,或是與 auto 關鍵字一起用來宣告型別為 Lambda 的變數。
右值參考
右值參考宣告子 (&&) 會宣告右值的參考。 rvalue 參考可讓您使用「移動語意」(Move Semantic) 和「完美轉送」(Perfect Forwarding) 來撰寫更有效率的建構函式、函式及樣板程式碼。
static_assert 宣告
static_assert 宣告會在編譯時期測試軟體判斷提示,與其他判斷提示機制在執行階段進行測試有所不同。 如果判斷提示失敗,編譯也會失敗,並發出指定的錯誤訊息。
nullptr 和 __nullptr 關鍵字
Visual C++ 編譯器可讓您搭配機器碼或 Managed 程式碼使用 nullptr 關鍵字。 nullptr 關鍵字表示物件控制碼、內部指標或原生指標型別不指向物件。 使用 /clr 編譯器選項時,編譯器會將 nullptr 解譯為 Managed 程式碼,而不使用 /clr 選項時則解譯為機器碼。
Microsoft 專有的 __nullptr 關鍵字意義與 nullptr 相同,但僅套用至機器碼。 使用 /clr 編譯器選項來編譯原生 C/C++ 程式碼時,編譯器無法判斷 nullptr 關鍵字是機器碼或 Managed 程式碼。 若要對編譯器清楚定義,請使用 nullptr 關鍵字指定 Managed 程式碼,使用 __nullptr 指定機器碼。
/Zc:trigraphs 編譯器選項
三併詞支援預設是停用的。 請使用 /Zc:trigraphs 編譯器選項來啟用三併詞支援。
三併詞由兩個連續問號 (??) 後接唯一的第三個字元所組成。 編譯器會以對應的標點符號字元取代三併詞, 例如,編譯器會將 ??= 三併詞取代為 # (數字符號) 字元。 如果 C 原始程式檔所用的字元集不含某些標點符號字元,可改為使用三併詞。
新的特性指引最佳化選項
PogoSafeMode 是新的特性指引最佳化選項,可讓您指定最佳化應用程式時要使用安全模式還是快速模式。 安全模式具備執行緒安全,但是比快速模式緩慢。 快速模式是預設行為。
新的 Common Language Runtime (CLR) 選項 /clr:nostdlib
/clr (Common Language Runtime 編譯) 加入了新選項, 如果納入同一程式庫的不同版本,會發生編譯錯誤。 新選項可以排除預設 CLR 程式庫,您的程式就能使用指定版本。
新的 pragma 指示詞 - detect_mistmatch
detect_mismatch pragma 指示詞可讓您在檔案中放置標籤,與其他具有相同名稱的標籤進行比較。 如果相同名稱含有多個不同的值時,連接器便會發出錯誤。
XOP 內建函式、FMA4 內建函式和 LWP 內建函式
已加入新的內建函式來支援 針對 Visual Studio 2010 SP1 加入的 XOP 內建、針對 Visual Studio 2010 SP1 加入的 FMA4 內建 和 針對 Visual Studio 2010 SP1 加入的 LWP 內建 處理器技術。 使用 __cpuid, __cpuidex 可判斷特定電腦上支援哪些處理器技術。
Visual C++ 專案和建置系統
MSBuild
Visual C++ 方案和專案現在改以 MSBuild.exe 進行建置,取代以往使用的 VCBuild.exe。 MSBuild 是其他 Visual Studio 語言和專案類型採用的彈性、可擴充 XML 架構建置工具。 由於這項變更,Visual C++ 專案檔現在使用 XML 檔案格式,並具有 .vcxproj 副檔名。 舊版 Visual Studio 的 Visual C++ 專案檔會自動轉換為新的檔案格式。 如需詳細資訊,請參閱 MSBuild (Visual C++)。
VC++ 目錄
VC++ 目錄設定現在位於兩個位置。 專案屬性頁用於設定 VC++ 目錄的每個專案值。 [屬性管理員] 和屬性工作表用於設定 VC++ 目錄的每個組態全域值。
專案對專案間的相依性
在舊版中,專案之間定義的相依性會儲存在方案檔內。 這些方案轉換為新的專案檔案格式時,相依性會轉換為「專案對專案間」(Project-to-Project) 參考。 由於方案相依性和專案對專案間參考的概念不同,因此這項變更會影響應用程式。
巨集和環境變數
新的 _ITERATOR_DEBUG_LEVEL 巨集會叫用 Iterator 的偵錯支援。 請使用這個巨集取代舊的 _SECURE_SCL 和 _HAS_ITERATOR_DEBUGGING 巨集。
Visual C++ 程式庫
並行執行階段程式庫
並行執行階段架構可支援同時執行的應用程式和元件,這個架構也是使用 Visual C++ 設計並行應用程式的架構。 為了支援並行應用程式的程式設計,平行模式程式庫 (PPL) 提供了一般用途的容器和演算法來執行細部平行處理原則。 非同步代理程式程式庫提供動作項目程式設計模型和訊息傳遞介面,以進行粗略的資料流程和管線工作。
Standard C++ 程式庫
下列清單說明針對 Standard C++ 程式庫所做的許多變更。
已經使用新的 rvalue 參考 C++ 語言功能,針對標準樣板程式庫中的許多函式實作「移動語意」(Move Semantic) 和「完美轉送」(Perfect Forwarding)。 移動語意和完美轉送會大幅提高配置或指派變數或參數之作業的效能。
Rvalue 參考也會用來實作新的 unique_ptr 類別,此類別與 auto_ptr 類別相較之下是比較安全的智慧型指標型別。 unique_ptr 類別「可移動」(Movable) 而非「可複製」(Copyable),會實作嚴格的擁有權語意而不影響安全,而且可與感知 rvalue 參考的容器順利地搭配運作。 auto_ptr 類別已被取代。
已將十五個新的函式 (例如 find_if_not、copy_if 和 is_sorted) 加入至 <algorithm> 標頭。
在 <memory> 標頭中,新的 make_shared 函式是一種方便、強大且有效率的方式,可在建構物件的同時產生該物件的共用指標。
<forward_list> 標頭可支援單一連結清單。
新的 cbegin、cend、crbegin 和 crend 成員函式會提供可透過容器向前或向後移動的 const_iterator。
<system_error> 標頭和相關的樣板支援處理低階的系統錯誤。
exception_ptr 類別的成員可用來在執行緒之間傳輸例外狀況。
<codecvt> 標頭支援將 Unicode 字元的各種編碼方式轉換成其他編碼方式。
<allocators> 標頭會定義幾個樣板,協助配置及釋放節點容器的記憶體區塊。
<random> 標頭有許多更新。
Microsoft Foundation Class (MFC) 程式庫
Windows 7 功能
MFC 支援許多 Windows 7 功能,例如功能區使用者介面 (UI)、工作列、跳躍清單、索引標籤式縮圖、縮圖預覽、進度列、圖示覆疊和搜尋索引。 因為 MFC 自動支援許多 Windows 7 功能,所以您可能不必修改現有的應用程式。 若要在新的應用程式內支援其他功能,請使用 [MFC 應用程式精靈] 來指定您想要使用的功能。
多點觸控感知
MFC 支援擁有多點觸控使用者介面的應用程式,例如針對 Microsoft Surface 作業系統撰寫的應用程式。 多點觸控應用程式可以處理 Windows「觸控」(Touch) 訊息和「軌跡」(Gesture) 訊息,這些是觸控訊息的組合。 只需要針對觸控和軌跡事件註冊您的應用程式,作業系統就會將多點觸控事件路由傳送到事件處理常式。
高 DPI 感知
根據預設,MFC 應用程式現在「可感知高 DPI」(High-DPI-aware)。 如果應用程式可感知高 DPI (高的每英吋的點數),作業系統就可以將視窗、文字和其他 UI 項目縮放成目前的螢幕解析度。 這表示縮放的影像比較可能以正確的方式配置,而不會經過裁剪或像素化。
重新啟動管理員
「重新啟動管理員」(Restart Manager) 會自動儲存文件,並在應用程式意外關閉或重新啟動時加以重新啟動。 例如,在自動更新關閉應用程式之後,您可以使用重新啟動管理員來啟動它。 如需如何設定應用程式使用重新啟動管理員的詳細資訊,請參閱 HOW TO:加入重新啟動管理員支援。
CTaskDialog
CTaskDialog 類別可以用來取代標準的 AfxMessageBox 訊息方塊。 CTaskDialog 類別會顯示並收集比標準訊息方塊更多的資訊。
SafeInt 程式庫
新的 SafeInt 程式庫會執行負責處理整數溢位的安全算術運算。 這個程式庫也會比較不同的整數種類。
新的 Active Template Library (ATL) 巨集
ATL 已加入新的巨集,用以擴充 PROP_ENTRY_TYPE 和 PROP_ENTRY_TYPE_EX 的功能。 PROP_ENTRY_INTERFACE 和 PROP_ENTRY_INTERFACE_EX 可讓您加入有效 CLSID 的清單。 PROP_ENTRY_INTERFACE_CALLBACK 和 PROP_ENTRY_INTERFACE_CALLBACK_EX 可讓您指定回呼函式,以判斷 CLSID 是否有效。
/analyze 警告
已從 C 執行階段 (CRT)、MFC 和 ATL 程式庫移除大部分 /analyze (企業程式碼分析) 警告。
動畫和 D2D 支援
MFC 現在支援動畫和 Direct2D 圖形。 MFC 程式庫有幾個新的 MFC 類別和函式可支援這項功能, 也有兩個新的逐步解說可示範如何將 D2D 物件和動畫物件加入至專案中。 這些逐步解說為逐步解說:將 D2D 物件加入至 MFC 專案和逐步解說:將動畫加入至 MFC 專案。
IDE
在 Visual C++ 2010 中,整合式開發環境 (IDE) 在效能、正確性、延展性和工具方面有大幅的改良,讓您的生產力得以提高。
改良的 IntelliSense
適用於 Visual C++ 的 IntelliSense 已完整地經過重新設計,能夠以更快速、更精確且更強大的能力來處理更大型的專案。 為了達成這項改良,IDE 在開發人員如何檢視和修改原始程式碼以及 IDE 如何使用原始程式碼和專案設定來建置方案之間做了區別。
由於這個責任區隔,所以諸如 [類別檢視] 和新的 [巡覽至] 對話方塊等瀏覽功能是由根據新的 SQL Server 桌面資料庫 (.sdf) 檔案的系統所處理,該檔案會取代舊的「無編譯瀏覽」(No Compile Browse) (. ncb) 檔案。 IntelliSense 功能 (例如快速資訊、自動完成和參數說明) 只會在必要時剖析轉譯單位。 混合式功能 (例如新的 [呼叫階層] 視窗) 會使用瀏覽與 IntelliSense 功能的組合。
由於 IntelliSense 只會處理您此刻所需的資訊,所以 IDE 的反應更加靈敏。 此外,由於資訊比較新,所以 IDE 檢視和視窗也會更精確。 最後,由於 IDE 基礎結構組織更完善、更有能力且更具擴充性,所以可以處理更大型的專案。
改良的 IntelliSense 錯誤
IDE 比較能偵測會導致 IntelliSense 遺失的錯誤,並會在錯誤底下顯示紅色波形曲線。 此外,IDE 會在 [錯誤清單] 視窗中報告 IntelliSense 錯誤。 若要顯示導致問題的程式碼,請按兩下 [錯誤清單] 視窗中的錯誤。
#include 自動完成功能
IDE 支援 #include 關鍵字的自動完成功能。 當您輸入 #include 時,IDE 會建立有效標頭檔的下拉式清單方塊。 如果您繼續輸入檔案名稱,IDE 會根據您的輸入來篩選清單。 您隨時都可以從清單中選取想要包含的檔案。 這樣可讓您快速地包括檔案,而不需要知道確切的檔名。
巡覽至
[巡覽至] 對話方塊可讓您搜尋專案中符合指定之字串的所有符號和檔案。 當您在搜尋字串中輸入其他字元時,搜尋結果會立即修改。 [結果] 回應欄位會告訴您找到的項目數,並協助您決定是否要限制搜尋。 [類型/範圍]、[位置] 和 [預覽] 回應欄位可協助您釐清具有類似名稱的項目。 此外,您也可以擴充這項功能來支援其他程式設計語言。
平行偵錯和程式碼剖析
Visual Studio 偵錯工具可感知並行執行階段,並且可協助您針對平行處理應用程式進行疑難排解。 您可以使用新的並行分析工具,視覺化應用程式的整體行為。 此外,您也可以使用新的工具視窗,視覺化工作及其呼叫堆疊的狀態。
功能區設計工具
功能區設計工具是一種圖形化編輯器,可讓您建立及修改 MFC 功能區 UI。 最終的功能區 UI 是由 XML 架構資源檔 (.mfcribbon-ms) 所表示。 對於現有的應用程式,您可以暫時加入幾行程式碼,然後叫用 [功能區設計工具],藉此擷取目前的功能區 UI。 在建立功能區資源檔之後,您可以使用一些會載入功能區資源的陳述式來取代手寫的功能區 UI 程式碼。
呼叫階層
[呼叫階層] 視窗可讓您巡覽至特定函式所呼叫的所有函式,或是巡覽至可呼叫特定函式的所有函式。
工具
MFC 類別精靈
Visual C++ 2010 帶回受到好評的 MFC 類別精靈工具。 [MFC 類別精靈] 是一種方便在專案中加入類別、訊息和變數,而不需手動修改原始程式檔集合的方式。
ATL 控制項精靈
ATL 控制項精靈不再自動填入 [ProgID] 欄位。 如果 ATL 控制項沒有 ProgID,,其他工具可能無法使用它。 要求控制項具有 ProgID 的工具範例為 [插入 ActiveX 控制項] 對話方塊。 如需這個對話方塊的詳細資訊,請參閱插入 ActiveX 控制項對話方塊。
Microsoft Macro Assembler 參考
加入 YMMWORD 資料型別,可支援 Intel Advanced Vector Extensions (AVX) 指示包含的 256 位元多媒體運算元。