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

时间:2013-12-26 17:49:51

标签: c++ pointers global-variables

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

是否可以保证这有效?

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

2 个答案:

答案 0 :(得分: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的整数文字转换为指针类型会产生空指针值

(强调我的)

答案 1 :(得分:5)

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

  

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

然后

  

具有静态存储持续时间的非局部变量初始化为a   程序启动的结果。

  

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