全局指针是否初始化为零?

Bar*_*ski 5 c++ pointers global-variables

我想知道cpp标准关于全局初始化的内容.我发现这个答案很有帮助,但没有提到指针类型.

有保证这会有效吗?

char* myptr
int main()
{
    if (myptr == NULL)
    {
        std::cout << "All good!" << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

Cub*_*bbi 9

是的,保证将在命名空间范围(在您的情况下为全局命名空间)中定义的指针初始化为该类型的正确空指针值.

对于标准参考,

3.6.2[basic.start.init]/2 "具有静态存储持续时间的变量......应为零初始化(8.5)"

8.5[dcl.init]/6 "零初始化...意味着:如果T是标量类型(3.9),则将对象初始化为通过将整数0(零)转换为T获得的值; [106]"

106)如4.10中所述,将值为0的整数文字转换为指针类型会产生空指针值.

(强调我的)


Vla*_*cow 5

我会附加@Cubbi的上一篇文章,根据同一标准,标量类型是

算术类型(3.9.1),枚举类型,指针类型,指向成员类型的指针(3.9.2),std :: nullptr_- t和这些类型的cv限定版本(3.9.3)统称为标量类型

然后

具有静态存储持续时间的非局部变量由于程序启动而初始化.

具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量应在任何其他初始化发生之前进行零初始化(8.5).