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

C++ 扩展初始值设定项列表和未初始化成员,c++,C++,在过去,这种结构是: 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=%i\n"

在过去,这种结构是:

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=%i\n", a.m_i, a.m_j);
}

void y() {
    f({10});
}

int main() {
    y();
    return 0;
}
#包括
类型定义结构A{
国际货币基金组织;
国际博物馆;
}A;
空f(常数A和A){
printf(“i=%i,j=%i\n”,a.m\u i,a.m\u j);
}
void y(){
f({10});
}
int main(){
y();
返回0;
}
使用
g++-std=c++11 a.cpp构建

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

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

typedef struct A {
    int m_i;
    int m_j;
} A;
是一个集合。使用带括号的init列表初始化聚合时,它使用列表中的每个元素初始化聚合的每个成员。如果在带大括号的init列表中没有提供足够的元素,则保证每个后续成员都进行了值初始化,这对于基本类型意味着它们是零初始化的


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

什么是“扩展初始值设定项列表”?在C++中,这不是什么真正的事情。我认为没有第二个成员不会被初始化为0的好的旧的日子。不知道什么是代码< >()>代码>函数是BTW.Foovie: C++已经知道标识符是一个代码>结构> <代码>还是一个<代码>类<代码>或什么,所以<代码> TyPuff结构{{}};代码>只能是一个普通的
结构{…}什么是“扩展初始值设定项列表”?在C++中,这不是什么真正的事情。我认为没有第二个成员不会被初始化为0的好的旧的日子。不知道什么是代码< >()>代码>函数是BTW.Foovie: C++已经知道标识符是一个代码>结构> <代码>还是一个<代码>类<代码>或什么,所以<代码> TyPuff结构{{}};代码>只能是一个普通的
结构{…}