for ループ内で String^ 変数を宣言するが初期化しない C++/CLI プロジェクトがあります。最初の繰り返しで、変数は何らかの値に設定されます。後続の各反復では、前の値が保持されているように見えます。ローカル スコープの変数は、ループのたびに null (または同等のもの) に初期化されるべきではありませんか? これは int でも起こります。また、警告レベルを W4 に設定しない限り、コンパイラは初期化されていない可能性のある値を警告しません。
これは、動作を示すサンプル コードです。
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
for(int n = 0; n < 10; n++)
{
String^ variable;
int x;
switch(n)
{
case 1:
variable = "One";
x = 1;
break;
case 5:
variable = "Five";
x = 5;
break;
}
Console::WriteLine("{0}{1}", variable, x);
}
}
これの出力は次のようになります
One, 1
One, 1
One, 1
One, 1
Five, 5
Five, 5
Five, 5
Five, 5
Five, 5
ローカル スコープの変数を初期化する方法を完全に誤解していますか? これはマネージ C++ に固有の "機能" ですか? これを C# に変換すると、基本警告レベルであっても、コンパイラは両方の変数について警告します。