4

初期化されていないローカルを言うことができる場合int、それは未定義の値を取得しますが、ローカルchar変数がある場合、それも未定義の値を持つべきではありませんか?もちろん、0はその未定義の値である可能性がありますが、私が見つけたすべての関連情報は約intであり、char変数がintにキャストされると、以下のプログラムは0を出力するだけなので、charは何か違うのだろうかと思っていました。フラグなしでGCC4.7を使用しています。

int main()
{
char test1;
int test2;

std::cout<<test2; //garbage
std::cout<<std::endl;
std::cout<<(int)test1; //0
    return 0;
}
4

3 に答える 3

4

初期化されていないということは、実際には初期化されていないということです。特定の時間にマシンで常に特定の値を取得しているからといって、それがすべてのマシンで常に当てはまるとは限りません。

関数のアセンブリコードをダンプして検査することで、変数を初期化しているものがないことを確認できます。

于 2012-10-19T04:24:02.840 に答える
3

初期化されていないローカルintを言うことができる場合、それは未定義の値を取得します

いいえ、それはそれについて考える正しい方法ではありません。ローカル変数は未定義の値を取得せず、値を取得しません。続いて、このような初期化されていない変数をクエリすると、未定義の動作が呼び出されます。

プログラムは必ずしも「0」を出力するとは限りません。必ずしも数字を印刷したり、まったく印刷したりするわけではありません。確かに、一般的なコンピューターでは、一般的なコンパイラーを使用して、プログラムはいくつかの数値を出力しますが、C ++言語の範囲内では、プログラムが何を実行するか、何を実行しないかについて予測することはできません

于 2012-10-19T05:41:02.823 に答える
2

ローカル変数は、その時点で占有しているスタックスペースにあるランダムデータから初期値を取得します。スペースにゼロが含まれるという保証はありません。

于 2012-10-19T04:24:23.443 に答える