【发布时间】:2016-10-09 01:45:54
【问题描述】:
在 C++ 中,如果我以“= {}”的形式初始化结构,如下例所示,它是否确保为结构的所有成员分配零值? 我理解这个看似重复的问题,但我的问题也是,如果它对所有成员初始化为零,它是否也适用于复杂结构? 像结构中的结构,或者为此必须在代码中为每个成员显式分配零值?
typedef struct s{
int i;
bool x;
};
int main ()
{
s initial = {};
printf("%d %d", initial.i, initial.x);
}
编辑:引用复杂结构,
typedef struct scomplex{
s initial;
s t[5];
};
int main (void)
{
scomplex sc = {};
printf ("%d %d %d",sc.initial.i, sc.initial.x, sc.t[0].i);
}
【问题讨论】:
-
en.cppreference.com/w/cpp/language/value_initialization 这是值初始化,因为没有用户定义的默认构造函数。
-
如果您不希望将其作为重复项关闭,请发布一些不重复的示例代码。
-
@lapk 这是聚合初始化,不是值初始化
-
@M.M 我认为,它是
struct s的聚合初始化,但struct s的非类类型成员的值初始化(因为struct s) 没有默认的用户定义构造函数,因此它们被0 初始化。我错了吗? -
当然,所有值都将为零。请参阅(聚合初始化)en.cppreference.com/w/cpp/language/aggregate_initialization
标签: c++ struct initialization