我认为在 C++/CLI 中声明一个没有显式初始值的局部引用变量总是将其初始化为 nullptr。我发现这不会发生在第二个和以后进入本地块的条目中。这是示例代码。
void main()
{
for (int i=0; i<6; i++)
{
switch (i)
{
case 2:
Console::WriteLine("i={0} localI and hashTable no longer in scope", i);
break;
default:
{
// Declare local reference variable
Hashtable^ hashTable;
Int32 localI;
Console::WriteLine("i={0} localI={1} {2}",
i, localI,
hashTable == nullptr ? "hashTable=nullptr" : "hashTable NOT SET to nullptr"
);
hashTable = gcnew Hashtable();
localI = i+1;
}
break;
}
}
}
输出是:
i=0 localI=0 hashTable=nullptr
i=1 localI=1 hashTable NOT SET to nullptr
i=2 localI and hashTable no longer in scope
i=3 localI=2 hashTable NOT SET to nullptr
i=4 localI=4 hashTable NOT SET to nullptr
i=5 localI=5 hashTable NOT SET to nullptr
如果我添加显式初始化
Hashtable^ hashTable = nullptr;
Int32 localI = 99;
然后每个循环重新初始化引用和localI
i=0 localI=99 hashTable=nullptr
i=1 localI=99 hashTable=nullptr
i=2 localI and hashTable no longer in scope
i=3 localI=99 hashTable=nullptr
i=4 localI=99 hashTable=nullptr
i=5 localI=99 hashTable=nullptr
这似乎与我在 MSDN 上找到的内容相矛盾,其中说:
“以下代码示例显示,当声明句柄但未显式初始化时,它们默认初始化为 nullptr。”