一、緒論
當微軟推出VS.NET7實現了可擴展的托管後,C++程序員們反映不一。盡管大部分的程序員對於能夠繼續使用C++感到很欣慰,但幾乎所有的人對於托管C++提供的晦澀語法感到很痛苦。微軟明顯從反饋中感覺到托管C++不是那麼成功。
2003年10月6日,ECMA(歐洲計算機制造商協會)宣布成立專家組,負責結合ISO標准C++與通用語言,開發一個可擴展語言的標准,這個新的可擴展語言被稱為C++/CLI標准。這個標准將被VS.NET2005的C++編譯器支持。
二、老語法存在的問題
1、晦澀繁瑣的語法和文法--這兩個"雙重底線"問題加重了閱讀的負擔。
2、二流的CLI支持--相對與C#與VB.NET,MC++使用不方便的工作區來提供CLI支持,例如,它沒有一個一一對應的結構來列舉.NET的集合。
3、C++與.NET粗陋地結合--對於CLI類型,你不能使用C++的特色,例如模板;同樣,對於C++類型,你不能使用CLI的特色,例如碎片帳集。
4、令人混淆的指針--非托管的C++的指針及托管的引用指針都使用*語法,這非常令人混淆,因為-gc指針與托管指針在本質和行為上完全不同。
5、MFC編譯器不能產生可校驗的代碼。
三、C++/CLI給我們提供了什麼?
1、優雅流暢的語法和文法--C++/CLI為C++開發人員書寫托管代碼提供了一種非常自然的感覺,並且它提供了非托管代碼到托管代碼的平滑過度。以前所謂的"雙重底線"問題現在已經蕩然無存。
2、一流的CLI支持--CLI特色,例如屬性、碎片集合和屬類得到了直接支持,此外,C++/CLI還准許將這些特色用於本地非托管的類。
3、一流的C++類支持--C++特色,例如模板和析構函數對於拖管和非拖管類繼續有效。實際上,C++/CLI是你可以"表面上"在棧或C++本地堆上聲明一個.NET類型唯一的.NET語言。