扩展初始值设定项列表和未初始化的成员

extended initializer list and uninitialized members

本文关键字:初始化 成员 列表 扩展      更新时间:2023-10-16

在过去,结构是这样的:

typedef struct A {
int m_i;
int m_j;
} A;

在堆上分配或在函数中本地声明而不memset其成员将未初始化。

然而,令我非常惊讶的是,这个小程序显示它总是设置为 0。

#include <stdio.h>
typedef struct A {
int m_i;
int m_j;
} A;
void f(const A& a) {
printf("i=%i, j=%in", a.m_i, a.m_j);
}
void y() {
f({10});
}
int main() {
y();
return 0;
}

使用g++ -std=c++11 a.cpp构建

我会以防万一地定义一个构造函数以确保它们为零,但我的各种测试表明(使用在互联网上找到的代码(我不必这样做。

这是剪切巧合还是扩展的初始值设定项列表是内存被内存设置的保证?

typedef struct A {
int m_i;
int m_j;
} A;

是一个聚合。 使用大括号初始化聚合时,它使用列表中的每个元素来初始化聚合的每个成员。 如果你没有在大括号的init列表中提供足够的元素,那么保证每个后续成员都被值初始化,这对于基本类型意味着它们初始化为零。