2011-03-19 33 views
2

我已閱讀Foundations of C++ CLI如下:C++/CLI與純模式?

如果你嘗試編譯/ CLR原生C++ 應用:純,只會 工作,如果所編譯的代碼 沒有結構產生 機 - 特定的代碼。然而,你可以, ,然後,鏈接本地庫。

什麼意思是「constructs that generate machine-specific code」?例?

另外,這本書說這種模式不是可驗證的安全,所以我們可以使用指針,例如,現在我很困惑,怎麼說編譯器會產生純粹的MSIL代碼,我們也可以使用指針!我知道的是,指針是某種原生的概念!它將如何作爲純粹的MSIL!?

回答

2

MSIL功能非常強大,符合標準的C++ 03代碼沒有問題。我所知道的無法處理的唯一「構造」是__fastcall調用約定,VS2010中的C++ 0x添加中實現的r值引用以及__asm關鍵字(內聯程序集)和內部函數等明顯的機器特定擴展。

大多數使用/ clr生效的本機C++都會使用指針,顯式指令或編譯器生成的指針來實現類似C++類和引用的操作。 MSIL沒有問題,但該代碼不可驗證,任何使用指針的MSIL都會被驗證者拒絕。這不一定是個問題,很多代碼都以完全信任的方式運行。當您嘗試在沙盒執行環境(如瀏覽器,電話或遊戲控制檯)上運行它時,您只會遇到麻煩。或者當你的客戶有神經系統管理員時。

使用/ clr:純粹是相當無用的。使用C++/CLI的重點在於它能夠很好地支持與本機代碼的互操作。將本機代碼編譯爲MSIL在很大程度上是一種浪費,JIT優化器無法像本機代碼優化器那樣有效地完成工作。

+0

即使拋出'/ clr:pure',Visual C++仍然會比C#編譯器做更多的優化。 '/ clr:pure'的用法是創建一個可以加載到Silverlight中的'AnyCPU'程序集或程序集。而說「使用C++/CLI的關鍵是C++ interop」忽略了一點,其他.NET語言並沒有接近C++模板的強大功能和靈活性。 (通用元編程?不要讓我發笑。) – 2011-03-20 00:18:21