VS.NET 2002/2003 的 Managed C++ (MC++) 雖讓 C++ 開發者進入 .NET,但雙底線語法 (__gc, __box) 晦澀難讀,CLI 支援二流 (無 foreach、無泛型、模板受限),原生與托管類型互不相容。ECMA 2003 年成立專家組,歷時兩年制定 C++/CLI 標準 (ECMA-372),Visual C++ 2005 全面支援。
| Managed C++ | C++/CLI | 說明 |
|---|---|---|
__gc class Foo | ref class Foo | 托管參考類型 |
__value struct Bar | value struct Bar | 托管值類型 (堆疊/內嵌) |
__interface I | interface class I | 介面定義 |
Foo* p = new Foo() | Foo^ p = gcnew Foo() | 控制代碼 (Handle) 區分原生指標 |
__property | property | 屬性語法原生化 |
generic<typename T> ref class List,CLI 層面泛型,支援執行期具現化、跨語言共享。event, delegate 整合 .NET 事件模型。for each (int i in coll) 直接支援 IEnumerable。template<typename T> ref class Wrapper —— C++ 模板與 CLI 泛型並存,各司其職。~Class() (確定性釋放) + !Class() (非確定性 GC 終結),RAII 模式完美映射到 IDisposable。Foo f; // 隱含 gcnew, 自動呼叫 ~Foo() —— 唯一允許在堆疊語意使用 CLI 參考類型的 .NET 語言。class 可定義 property, event,打破類型隔離。/clr 編譯選項)。/clr:oldSyntax 相容編譯,逐模組重寫為新語法。/clr 未啟用,透過 C++/CLI 包裝層互操作。