在C ++ Primer 5th(第12章)中,
默认情况下,默认初始化动态分配的对象,这意味着内置或复合类型的对象具有未定义的值;
int *pi = new int; // unitialized int
此语句表示内置类型对象在默认初始化时具有未定义的值。但是,默认初始化内置类型对象的行为取决于它的定义位置。
具体而言,任何函数外部的内置类型对象都应为0
,而某些块内的内置类型对象具有未定义的值。
因此,我认为上述陈述不准确,因为对于内置类型:
默认初始化!=未定义值
我能理解这一点吗?
答案 0 :(得分:8)
对于非类类型,默认初始化不执行初始化。
但是,在进行任何其他初始化之前,具有静态或线程存储持续时间的变量始终为零初始化。因此,如果在全局范围内有int x;
,虽然默认初始化不执行任何操作,但由于在默认初始化之前进行的零初始化,x
仍然初始化为零。
对于具有动态存储持续时间的非类对象,如果没有给出初始值设定项,则该值是不确定的,因为零初始化不适用。