CPP / CLI中的Native和Managed之间是否存在混淆?

时间:2011-02-23 19:15:29

标签: c++-cli

如果我使用/ clr模式编译具有以下内容的代码:

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和&amp; ManArr2两个初始化之间的区别是什么?

2 个答案:

答案 0 :(得分:2)

使用/clr进行编译时,除非您使用#pragma managed(off)#pragma unmanaged

,否则您的整个程序都会转换为MSIL
  • int相当于System::Int32
  • char相当于System::SByte(不是System::Char!)
  • 这两种类型都是“原始的”。托管代码将它们视为托管类型,本机代码将其视为本机类型。
  • 原生数组将使用无法验证的MSIL(例如,与C#指针相同)

答案 1 :(得分:1)

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

没有功能差异,一个是另一个的简写。