C ++で構造体をゼロに初期化する方法について大量のテストを行い、この回答を書いた後(注:それに対する反対票は、それを完全に書き直す前でした)、なぜ= {0}
すべてのメンバーを設定しないのか理解できません構造体をゼロに!
これを行う場合:
struct data_t
{
int num1 = 100;
int num2 = -100;
int num3;
int num4 = 150;
};
data_t d3 = {0};
printf("d3.num1 = %i\nd3.num2 = %i\nd3.num3 = %i\nd3.num4 = %i\n\n",
d3.num1, d3.num2, d3.num3, d3.num4);
...出力は次のとおりです。
d3.num1 = 0
d3.num2 = -100
d3.num3 = 0
d3.num4 = 150
...出力は次のようになると予想していましたが:
d3.num1 = 0
d3.num2 = 0
d3.num3 = 0
d3.num4 = 0
...これは、FIRST メンバーのみがゼロに設定され、残りはすべてデフォルトに設定されたことを意味します。
私は常に、これら 3 つの方法のいずれかで構造体を初期化するとゼロ初期化されるという印象を受けていましたが、明らかに間違っています。
data_t d{}
data_t d = {}
data_t d = {0}
したがって、この回答からの私の重要なポイントは次のとおりです。
ここで重要なことは
data_t d{}
、 、data_t d = {}
、およびdata_t d = {0}
のどれも実際には構造体のすべてのメンバーをゼロに設定しないということです。
data_t d{}
すべての値を構造体で定義されたデフォルトに設定します。data_t d = {}
また、すべての値をデフォルトに設定します。data_t d = {0}
FIRST 値のみをゼロに設定し、他のすべての値をデフォルトに設定します。
= {0}
では、C++ 構造体を初期化してすべてのメンバーを 0に設定しないのはなぜでしょうか?
上記の重要なポイントは、実際には、私が何年も使用してきたこのかなり公式に見えるドキュメント ( https://en.cppreference.com/w/cpp/language/zero_initialization ) と矛盾していることT t = {} ;
に注意してください。T {} ;
実際、私のテストと上記の要点によると、初期化子はそうではありません。
参考文献:
- C++ で構造体を 0 に初期化する方法
- 更新: このリファレンスも指摘されました:オブジェクトを初期化するときの {0} の意味は何ですか?