2011-02-23 67 views
0

如果我使用/ CLR模式編譯具有財產以後類似下面的代碼:CPP/CLI中的Native和Managed之間的混淆?

int x = 3; 
char ch='A'; 
int arr[]="Hi"; 
array<int>^ ManArr1={44}; 
array<int>^ ManArr2= gcnew array<int> {44}; 
現在

我的問題: 請問型int被映射到System::Int32?那麼char ch呢?他們認爲是本地還是託管類型?哪裏會被執行!通過MSIL或不!

我們看到int arr[]是一個本地數組,是否意味着它將被執行出MSIL?

最後一個問題,,對於管理型陣列ManArr1 & ManArr2這兩個初始化有什麼區別?

回答

2

/clr編譯,你的整個程序,除非你使用#pragma managed(off)#pragma unmanaged

  • int相當於System::Int32
  • char相當於System::SByte轉換成MSIL(不System::Char!)
  • 兩個這些類型是「原始的」。託管代碼將它們視爲託管類型,本地代碼將本機類型視爲託管類型。
  • 本地陣列將使用無法驗證的MSIL(同C#指針,例如)
+0

太棒了!這很清楚......謝謝。 – Aan 2011-02-23 21:59:12

1

關於"For both the managed array ManArr1 & ManArr2 what is the difference between the two initialization ??"

沒有功能上的差異,一類是爲其他的簡寫。

+0

感謝的人。祝你好運 – Aan 2011-02-23 20:17:48