首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

跨越 C++:下一代 C++——C++/CLI 入門與核心語法

     編輯:VC 教學

緣起:從 Managed C++ 到 C++/CLI

VS.NET 2002/2003 的 Managed C++(MC++)雖能編寫 .NET 程式,但語法晦澀(雙底線關鍵字)、CLI 支援不完整、原生與受控型別互通困難。2003 年 ECMA 成立專家組,制定 C++/CLI 標準(ECMA-372),Visual Studio 2005 正式支援。

舊語法五大痛點

  1. 雙重底線關鍵字:__gc、__value、__interface 等閱讀負擔重。
  2. 二流 CLI 支援:無 foreach 對應、無屬性語法、集合列舉困難。
  3. 粗糙結合:CLI 型別不能用模板,原生型別不能用 CLI 特性。
  4. 指標混淆:原生 * 與受控 __gc* 同符號卻語意迥異。
  5. 無法產生可驗證程式碼:MFC 編譯器輸出不通過 PEVerify。

C++/CLI 五大突破

  1. 優雅語法:ref class、value struct、interface class、property、delegate、event、generic 皆為一級語法。
  2. 一流 CLI 支援:屬性、索引器、事件、泛型、foreach 直觀可用。
  3. 一流 C++ 支援:模板、解構函式、RAII 在受控/非受控類別均有效。
  4. 橋樑作用:原生與 BCL 無縫互通,pin_ptr、marshal_as 簡化封送。
  5. 可驗證輸出:/clr:safe 編譯產生純 MSIL,通過 PEVerify。

Hello World 新舊對比

// C++/CLI (VS2005+)
using namespace System;
void _tmain() { Console::WriteLine("Hello World"); }
// 無需 #using ,/clr 隱含參考

控制碼(Handle)詳解

^(帽子符號)代表受控物件參考,對應舊語法 __gc*。關鍵差異:

特性原生指標 *控制碼 ^
指向固定記憶體位址受控堆,GC 可能移動
生命週期手動 deleteGC 自動回收
型別安全可轉 void*嚴格型別,不可為 void^
建立關鍵字newgcnew

CLR 物件具現化

void _tmain()
{
    String^ str = gcnew String("Hello World");
    Object^ o1 = gcnew Object();
    Console::WriteLine(str);
}

gcnew 分配於 CLR 堆並回傳 ^,明確區分受控/非受控建構。

後續學習路徑

  • 受控類別設計:ref class、屬性、索引子、泛型約束。
  • 混合模式程式設計:pin_ptr、marshal_context、#pragma managed/unmanaged。
  • 互通進階:P/Invoke、COM Interop、C++/CLI 包裝原生庫供 C# 使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved