2017-03-19 13 views
3

Cの方法はmemset()です。これは、デフォルトではゴミで埋められていると考えられるためです。 C++では、= {0}を0に初期化します。Dの構造体にゼロ初期化が必要ですか?

addrinfo hints; 
memset (&hints, 0, sizeof (struct addrinfo)); 

ゼロ初期化のためのD方法は何ですか?

答えて

6

それ自動的に構造体の定義で=0にそれらを設定しない限り、個々のフィールドに、NaN値に設定され、通常はゼロ(しかしcharまたはfloat家族のために特にないされ、その内容、に基づいて初期化します)..

通常、D構造体を明示的に初期化する必要はありません。コンパイラは自動的にそれを行います。正しいことをしていない場合は、構造体定義自体に設定する必要があります。ただし、定義を変更できず、特にゼロが必要な場合でも、C memset関数を使用することはできます。

foo f = void; // skip normal initialization 
    import core.stdc.string; 
    memset(&f, 0, f.sizeof); // set to 0 with memset 
関連する問題