C++ 结构变量={0}表示法

C++ 结构变量={0}表示法,c++,C++,我正在查看windows socket API,它使用: WSADATA wsaData = {0}; 这个{0}到底是做什么的 WSADATA wsaData = {0}; WSADATA wsaData = {}; // This is also allowed, and is the same as the above one 表示将结构中的所有成员初始化为0 这也适用于阵列。例如: int numbers[20] = {0} numbers数组中的所有元素都初始化为0 表示将结构中

我正在查看windows socket API,它使用:

WSADATA wsaData = {0};
这个{0}到底是做什么的

WSADATA wsaData = {0};
WSADATA wsaData = {}; // This is also allowed, and is the same as the above one
表示将结构中的所有成员初始化为
0

这也适用于阵列。例如:

int numbers[20] = {0}
numbers
数组中的所有元素都初始化为
0

表示将结构中的所有成员初始化为
0

这也适用于阵列。例如:

int numbers[20] = {0}

numbers
数组中的所有元素都被初始化为
0

这意味着您正在将结构中的每个元素初始化为0

即使你写信

WSADATA wsaData = {};
然后它还会将struct的每个成员初始化为零

旁注:

静态存储持续时间对象始终初始化为零。根据标准:

具有静态存储持续时间(3.7.1)的对象应初始化为零 (8.5)在进行任何其他初始化之前。零初始化 使用常量表达式进行初始化和初始化统称为 静态初始化;所有其他初始化都是动态的 初始化。POD[普通旧数据]类型(3.9)的对象 使用常量表达式初始化的静态存储持续时间(5.19) 应在进行任何动态初始化之前进行初始化。 在中的命名空间范围中定义了静态存储持续时间的对象 应初始化相同的翻译单元和动态初始化 按照其定义在译文中出现的顺序 单元[注:8.5.1描述了聚合成员的排序 初始化。描述了局部静态对象的初始化 第6.7款。]


这意味着您正在将结构中的每个元素初始化为0

即使你写信

WSADATA wsaData = {};
然后它还会将struct的每个成员初始化为零

旁注:

静态存储持续时间对象始终初始化为零。根据标准:

具有静态存储持续时间(3.7.1)的对象应初始化为零 (8.5)在进行任何其他初始化之前。零初始化 使用常量表达式进行初始化和初始化统称为 静态初始化;所有其他初始化都是动态的 初始化。POD[普通旧数据]类型(3.9)的对象 使用常量表达式初始化的静态存储持续时间(5.19) 应在进行任何动态初始化之前进行初始化。 在中的命名空间范围中定义了静态存储持续时间的对象 应初始化相同的翻译单元和动态初始化 按照其定义在译文中出现的顺序 单元[注:8.5.1描述了聚合成员的排序 初始化。描述了局部静态对象的初始化 第6.7款。]


它将结构中的所有成员初始化为0。它将结构中的所有成员初始化为0。您熟悉windows套接字API吗?您知道WSASTARTUP是否初始化WSADATA结构吗?它接受对它的引用,而API文档并没有真正说明。@user3735829对不起,我不是。你可以问另一个问题来得到专业的答案。幸运的是,你实际上可以去
={}。未提及的任何成员都是初始化的值。在C中,你至少需要提到一个成员,但是C++中,你不必感谢。您熟悉windows套接字API吗?您知道WSASTARTUP是否初始化WSADATA结构吗?它接受对它的引用,而API文档并没有真正说明。@user3735829对不起,我不是。你可以问另一个问题来得到专业的答案。幸运的是,你实际上可以去
={}。未提及的任何成员都是初始化的值。在C中,你至少需要提到一个成员,但是在C++中你不需要注意。<代码> {} /Cuth>需要C++ 11,其中代码“> { 0 } /Cuth>也适用于旧的编译程序。注意<代码> {} /Cuth>需要C++ 11,其中代码> { 0 } /CODE >也适用于旧编译器。