如果我有一个常见的 linux 结构,例如:
struct sockaddr_in
{
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char __pad[__SOCK_SIZE__ - sizeof(short int)
- sizeof(unsigned short int) - sizeof(struct in_addr)];
};
#define sin_zero __pad
我执行聚合初始化:
struct sockaddr_in my_addr = { 0 };
为什么这会将每个成员初始化为 0?
我的意思是:文档说:
如果初始化器子句的数量少于成员的数量或初始化器子句完全为空,则剩余的成员由它们的大括号或等号初始化器初始化,如果在类定义中提供,否则 (C++14 起)通过空列表执行值初始化。
为了简单起见:为什么这段代码打印 0?
struct sockaddr_in my_addr = {2, 2}; // initialize sin_family and sin_port to 2, everything else value-initialized
my_addr = {0};
std::cout << my_addr.sin_port; // Why is this 0?