1. ホーム
  2. c++

[解決済み】C++構造体のメンバはデフォルトで0に初期化されますか?

2022-04-06 13:09:38

質問

私はこれ struct :

struct Snapshot
{
    double x; 
    int y;
};

欲しい xy はデフォルトで0になるのでしょうか、それともしなければならないのでしょうか。

Snapshot s = {0,0};

その他、構造をゼロにする方法とは?

解決するには?

構造体を初期化しないとNULLにならない。

Snapshot s; // receives no initialization
Snapshot s = {}; // value initializes all members

2番目はすべてのメンバーを0にし、1番目は指定されない値のままにしておきます。これは再帰的であることに注意してください。

struct Parent { Snapshot s; };
Parent p; // receives no initialization
Parent p = {}; // value initializes all members

2つ目は p.s.{x,y} をゼロにします。構造体の中にコンストラクタがある場合は、これらの集約型イニシャライザ リストを使用することはできません。その場合は、これらのコンストラクタに適切なイニシャライゼーションを追加する必要があります。

struct Snapshot {
    int x;
    double y;
    Snapshot():x(0),y(0) { }
    // other ctors / functions...
};

xとyの両方を0に初期化します。 x(), y() を使えば、型に関係なく初期化することができます。これは値の初期化であり、通常は適切な初期値(intなら0、doubleなら0.0、ユーザ定義のコンストラクタを持つ型ならデフォルトコンストラクタの呼び出し、など)を生成します。これは、構造体がテンプレートの場合、特に重要です。