che*_*gpu 3 c++ initialization language-lawyer
在C++ Primer 5th(第12章)中,
默认情况下,默认初始化动态分配的对象,这意味着内置或复合类型的对象具有未定义的值;
int *pi = new int; // unitialized int
Run Code Online (Sandbox Code Playgroud)
此语句指示内置类型对象在默认初始化时具有未定义的值.但是,默认初始化内置类型对象的行为取决于它的定义位置.
具体来说,任何函数外部的内置类型对象都应该是0
,而某些块内的内置类型对象具有未定义的值.
因此,我认为上面的陈述不准确,因为对于内置类型:
默认初始化!=未定义的值
我理解这个吗?
对于非类类型,默认初始化不执行初始化.
但是,在进行任何其他初始化之前,具有静态或线程存储持续时间的变量始终为零初始化.因此,如果您具有int x;
全局范围,尽管默认初始化不执行任何操作,x
但由于在默认初始化之前进行了零初始化,因此仍初始化为零.
对于具有动态存储持续时间的非类对象,如果未给出初始化程序,则该值是不确定的,因为零初始化不适用.