我想知道cpp标准关于全局初始化的内容。我发现this答案很有帮助,但没有提到指针类型。
是否可以保证这有效?
char* myptr
int main()
{
if (myptr == NULL)
{
std::cout << "All good!" << std::endl;
}
}
答案 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) 初始化发生。