我已经使用C ++大约4年了,一个月前又回来了,这也是我第一次听说CLI扩展的地方。我仍然要习惯它,但这个网站有很多帮助!谢谢!!无论如何,我找不到以下问题的答案:
当我声明变量
时int iStack;
然后它被声明但未定义,所以它可以有任何值,如
iStack = -858993460
取决于堆栈位置的值,创建变量的位置。
但是当我在堆上声明一个变量时
int^ iHeap
然后据我所知,创建了句柄但是变量没有实例化(不知道你是否在这里调用它实例化)或定义了我只能看到
iHeap = <Nicht definierter Wert> (which means <undefined value>)
有没有办法检测是否定义了这个值?
我特别不需要它用于int,但是例如
array<array<c_LocationRef^,2>^>^ arrTest2D_1D = gcnew array<array<c_LocationRef^,2>^>(2);
找出外部或内部数组的元素是否被实例化(我确定这是一个实例化;-))
arrTest2D_1D = {Length=2}
[0] = {Length=20}
[1] = <Nicht definierter Wert> (=<undefined value>)
答案 0 :(得分:2)
据我所知,CLR会自动在C ++ CLI中初始化变量和引用。
在.NET中,公共语言运行时(CLR)明确初始化所有 变量一旦创建就立即生效。值类型初始化为 0和引用类型初始化为null。
要检测您的变量是否已初始化,您应该将hat变量的值与nullptr进行比较:
int^ iHeap;
if(iHeap == nullptr){
Console::WriteLine(L"iHeap not initialised");
}
这适用于我的VS2010;它输出iHeap not initialised
它也适用于您的特定问题(数组)。
顺便说一下,值类型初始化为零,因此你的第一个例子应该输出0(我测试了它,它输出0):
int iStack;
Console::WriteLine(L"iStrack = {0}", iStack); // outputs 0
报价来自codeproject
nullptr
编辑:以下是Microsoft的另一个引用:
当你声明一个句柄时,它会自动用null初始化,所以它不会引用任何东西。
来自MSDN的引用,请参阅“追踪句柄”
段落