C++ 實現靜態物件模型,追求速度與大小最佳化,僅支援堆積配置的動態修改,允許無限接觸底層硬體,但難以操作執行期的活動型別與程式相關結構。Herb Sutter 稱之為「混凝土」語言。
CLI (Common Language Infrastructure) 支援動態元件程式模型,與 C++ 物件模型截然不同:即時軟體層在作業系統與程式間運行,限制底層硬體存取,但支援操作活動型別與程式結構。/ 代表兩者的綁定,本文探討此綁定的細節。
簡言之:C++/CLI 是靜態 C++ 物件模型到 CLI 動態元件模型的綁定,亦即如何用 C++ 在 .NET 中編程。同 C# 與 CLI 一樣,C++/CLI 正在 ECMA 標準化進程中。CLR 是 CLI 的微軟實現,Visual C++ 2005 是 C++/CLI 的實現。
C++/CLI 是 .NET 程式模式與 C++ 的結合,如同模板與 C++ 結合產生泛型程式設計。此結合保留了企業的 C++ 投資與開發者經驗,是採用 C++/CLI 開發的重要基礎。
在 GC 掃描壓縮時,托管堆上物件可能重新定位。原生指標無法自動追蹤,開發者也無法手動追蹤。C++/CLI 提供 內部指標 (interior pointer) 與 追蹤參考 (tracking reference),讓編譯器/運行時自動更新指向托管物件的參考。
C++/CLI 代表托管與原生程式設計的綜合,提供無與倫比的威力與優雅語法。開發者可單獨使用 CLI 型別編寫可驗證代碼 (如 SQL Server 2005 預存程序),也可充分利用 C++ 遷移路徑,在不犧牲簡潔性、編程效率、執行效率的前提下,編寫豐富的 .NET 應用程式。對於 C++ 開發者,這是進行 .NET 程式設計的最佳切入點。