【发布时间】:2021-03-27 11:08:53
【问题描述】:
假设我们在本地范围内声明了一个结构数组:
int main()
{
RandomStruct array [1000];
}
当前数组中的结构未初始化。虽然这意味着结构变量也未初始化,但这是否还意味着其他任何东西?例如,如果我将一个未初始化结构中的所有变量设置为所需的值,然后使用该结构的函数,或者如果我在设置它们之前使用不使用未初始化变量的结构的函数。我认为只有变量会未初始化并且数组所做的只是为每个结构的变量分配随机内存是正确的吗?
【问题讨论】:
-
"当前数组中的结构未初始化。" 调用结构的默认构造函数。 (结构的)包含变量未初始化,仅当默认构造函数未初始化它们时。
-
如果数组是本地的,为什么不应该调用默认构造函数?
-
"你错了" 然而,我说“(结构的)包含变量是未初始化的,只有在默认构造函数没有初始化它们的情况下。”和默认由编译器生成的构造函数不会初始化它们。当您没有阅读他们写的所有内容时,请不要说人们错了。
-
@12123232 这似乎不是一个正确的表征。在这两种情况下,都会使用默认 ctor,它可能是编译器生成的,也可能是用户提供的,具体取决于您在编写实际结构定义时是否声明了一个
-
@12123232 "所以对于具有本地数组的结构,它们是由编译器生成的默认构造函数构造的" 不一定。这就是我写评论的原因。构造函数可能是用户提供的,它可以初始化包含的变量。如果不知道
RandomStruct是什么,就不可能知道它的成员值是否会被初始化。如果是,例如struct RandomStruct {int a; RandomStruct () : a(-1) {}};-a将被初始化为-1,每次,无论在哪里进行这种构造。
标签: c++ struct initialization