2

この質問が来たとき、私は C++ オブジェクト モデルを調べていました。既定のコンストラクターが呼び出された場合、クラスのデータ メンバーの既定値は何ですか?

例えば

class A
{
     int x;
     char* s;
     double d;
     string str;       // very high doubt here as string is a wrapper class
     int y[20];
     public :
     void print_values()
     {
         cout<<x<<' '<<s<<' '<<d<<' '<<str<<' '<y[0]<<' '<<y<<endl;
     }
}

int main()
{
    A temp;
    temp.print_values(); // what does this print?
    return 0;
}
4

2 に答える 2

1

メモリを割り当てているときに、メモリに何が入るかを実際に予測することはできません。あなたが読んでいるメモリが0に設定されていないので、ほとんど何でもある可能性があります(または私が言うべきことは何か)。ほとんどの場合、小さな実行可能ファイルでは数値の値が 0 であることがわかります。

于 2013-10-01T01:22:30.837 に答える
1

変数がどこにあっても、初期化されていない変数の値は未定義です。

未定義は、必ずしもゼロまたは特定の何かを意味するわけではありません。たとえば、多くのデバッグ ビルドでは、無効なメモリ アクセスを検出するために使用できるパターンでメモリが満たされます。これらはリリース ビルド用に取り除かれ、メモリは見つかったままになっています。

于 2013-10-01T01:27:30.697 に答える