初始化为零的全局指针



我想知道 cpp 标准对全局初始化有什么看法。我发现这个答案很有帮助,但没有提到指针类型。

有保证这会起作用吗?

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

是的,保证在命名空间范围(在本例中为全局命名空间)定义的指针初始化为该类型的正确 null 指针值。

对于标准参考,

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

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

106) 如 4.10 中所述,将值为 0 的整数文本转换为指针类型会导致指针值为 null

(强调我的)

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

算术类型 (3.9.1)、枚举类型、指针类型、指针指向 成员类型 (3.9.2)、std::nullptr_- T 和符合 CV 标准的版本 这些类型 (3.9.3) 统称为标量类型

然后

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

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

相关内容

  • 没有找到相关文章

最新更新