解讀Visual C++ 2005具體實例
Visual C++ 2005 將為面向 Windows 和 .NET Framework 的系統和應用程序開發人員提供比其較低版本更多的功能和更細粒度的控制,人們計劃在該產品的所有領域(包括語言、編譯器和核心庫)進行關鍵改進。
這些增強功能將使 C++ 開發人員能夠更有效地面對 CLR、優化代碼的性能、面對 64 位 Windows 以及提高應用程序的安全性。此外,Visual C++ 2005 將 使開發人員能夠直接在 Visual Studio 2005 IDE 中為移動設備生成本機 C++ 應用程序。(有關嵌入式 C++ 開發的詳細信息,請參閱 “基于設備的開發”一節)。
通過 Visual C++ .NET 2002 版和 2003 版,托管擴展使開發人員能夠顯式利用 CLR 和 .NET Framework。在 Visual C++ 2005 中,現有的托管擴展語法將繼續得到完全支持。此外,Visual C++ 將通過強大的新功能以及用于編寫托管代碼的更為優雅的語法為 CLR 和 .NET Framework 提供擴展支持。該語法現正在作為到 ECMA 標準化公共語言基礎結構 (CLI) 的 C++ 綁定而進行 ECMA 標準化。這一新語法將稱為 C++/CLI。#t#
C++ 語言的 C++/CLI 子集主要將在 Visual C++ 2005 中實現,并將為 Visual C++ 開發人員提供很多新功能。C++ 開發人員將***次能夠使用真正的 C++ 編程范型編寫 .NET 連接的應用程序。例如,將為由 CLR 和垃圾回收器管理的代碼和數據啟用 C++ 模板和 C++ 樣式的確定性終止。此外,C++/CLI 還為 C++ 提供很多 CLR 編程范型,包括泛型的 CLR 實現。
C++/CLI 還簡化了定義和使用托管數據類型的方式。新標準引入的關鍵字對于 C++ 開發人員而言,比當前托管擴展的下劃線-下劃線 關鍵字更為直觀。在 C++/CLI 中,ref 關鍵字用來以與托管擴展 __gc 關鍵字類似的方式定義垃圾回收類:
- ref class MyRefClass { /* ... */ };
此外,C++/CLI 還引入一種新的類型 — 句柄,該類型用來表示自動垃圾回收的使用。句柄借用指針的語法,但使用加字符號 (^) 而不是星號 (*)。關鍵字 gcnew 用于創建上述垃圾回收對象,并且返回一個句柄:
- MyRefClass ^ c = gcnew MyRefClass();
通過 C++/CLI,開發人員還將能為句柄類型合并入傳統的 C++ 樣式確定性終止。這意味著可使用正常的 C++ 堆棧分配語法選擇性地將引用類型作為對象進行實例化。這樣,該對象將在脫離作用范圍時自動調用它的析構函數。該功能啟用了在其他面向 CLR 的語言中不可用的編程風格。
除了 C++/CLI 支持以外,Visual C++ 編譯器還將為面向 CLR 的代碼提供多個代碼生成增強功能。這些增強功能包括:能夠指定不包含本機 x86 指令的“純粹”圖像,以及通過 CLR 驗證過程的“安全”圖像。而且,Visual C++ 2005 編譯器能夠比其他托管語言更好地優化 MSIL。
為 Visual C++ 2005 中的 C++ 編譯器規劃了很多增強功能,其中之一便是 Profile Guided Optimizations (POGO)。POGO 技術使編譯器能夠測量應用程序的各種數據,并收集有關應用程序在運行時使用方式的信息。這些信息使 Visual C++ 能夠基于真實的應用程序使用模式進一步優化生成的代碼。