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