你需要对D中的结构进行零初始化吗?

exe*_*ook 3 d

C方式是memset()结构,因为默认情况下它被认为是垃圾填充.在C++中,你做= {0}零初始化.

addrinfo hints;
memset (&hints, 0, sizeof (struct addrinfo));
Run Code Online (Sandbox Code Playgroud)

什么是零初始化的D方式?

Ada*_*ppe 6

它会根据其内容自动初始化,这些内容通常为零(但特别是不适用于charfloat族,设置为nan值,除非您=0在结构定义中将它们设置为单个字段).

因此,通常,您不需要显式初始化D结构,编译器将自动为您执行此操作,如果它没有做正确的事情,您应该在结构定义本身上设置它.如果你不能改变定义并且特别需要零,你仍然可以使用C memset函数.

    foo f = void; // skip normal initialization
    import core.stdc.string;
    memset(&f, 0, f.sizeof); // set to 0 with memset
Run Code Online (Sandbox Code Playgroud)