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)
是的,保证将在命名空间范围(在您的情况下为全局命名空间)中定义的指针初始化为该类型的正确空指针值.
对于标准参考,
3.6.2[basic.start.init]/2
"具有静态存储持续时间的变量......应为零初始化(8.5)"
8.5[dcl.init]/6
"零初始化...意味着:如果T是标量类型(3.9),则将对象初始化为通过将整数0(零)转换为T获得的值; [106]"106)如4.10中所述,将值为0的整数文字转换为指针类型会产生空指针值.
(强调我的)
我会附加@Cubbi的上一篇文章,根据同一标准,标量类型是
算术类型(3.9.1),枚举类型,指针类型,指向成员类型的指针(3.9.2),std :: nullptr_- t和这些类型的cv限定版本(3.9.3)统称为标量类型
然后
具有静态存储持续时间的非局部变量由于程序启动而初始化.
和
具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量应在任何其他初始化发生之前进行零初始化(8.5).