4

コードを Java から C++ に変換する際に小さな問題があります

2次元配列が設定されているかどうかを確認しようとしています。これは私のJavaコードです

for(int area_y = y -1 ;area_y > 0 ;area_y--)
    {
        for(int area_x =  0 ;area_x < x; area_x++)
        {   
            if(area[area_x][area_y] == 0)
            {
                System.out.print(" "); // this is printed 
                                      //  if area[area_x][area_y] is not set 

            }
            else
            System.out.print(area[area_x][area_y]);


        }
            System.out.println();
    }

これは私のC ++コードであり、これは機能します

for(int area_y = y -1 ;area_y > 0 ;area_y--)
{
    for(int area_x =  0 ;area_x < x; area_x++)
    {   
        if(area[area_x][area_y] == 0) // this line does not work as
                                      // the next line is not executed
        {
            cout << "1";
        }
        else
        cout << (area[area_x][area_y]) ;                
    }

cout << endl;
}

問題は、その変数が設定されているかどうかを確認することです。char area[20][50];

c++ で変数が空 (設定されていない) かどうかを正しく確認するにはどうすればよいですか?

4

2 に答える 2

5

C++ では、スカラー型のオブジェクトはゼロで初期化されません。これらはデフォルトで初期化されます。つまり、初期化時に取得する値は未定義です。

char特に、 s やなどの値が 0 になる可能性は低く、int特定の値を持つためにそれに依存するべきではありません。作業を開始する前に配列セルを 0 に初期化する場合は、手動で初期化する必要があります。

Java の世界から来た場合、これは不必要な大量の作業だと思うかもしれませんが、C スタイルの配列で作業していること、および C はプログラマーの時間のためにパフォーマンスを犠牲にすることを意図していないことを考慮してください。0 への初期化が CPU 時間を無用に浪費し、使用しないものにお金を払いたくない場合があります。

于 2013-02-13T22:36:47.587 に答える
4

変数が「設定」されているかどうかを確認する方法はありません。特定の値と等しいかどうかのみを確認できます。

Java では、作成されたが初期化されていないすべてのプリミティブ データ型にコンパイラによってデフォルト値が与えられるため、Java のコードは機能しているようです。char の場合は '\u0000' で、0 に相当します。

C++ では、これらの文字の値は未定義です。同じ動作をさせたい場合は、チェックを行う前にすべての文字を明示的に 0 に設定する必要があります。

于 2013-02-13T22:38:15.027 に答える