指针默认初始化值不是NULL?

Dev*_*Dev -2 c++ pointers null-pointer

默认情况下,我们如何知道指针未初始化为NULL?有一个类似的问题针对为什么默认情况下没有用NULL初始化指针? 只是为了检查,这是一个非常简单的代码,只是为了查看默认情况下指针是否设置为NULL.

#include <iostream>
using namespace std;
int main()
{
    int* x;
    if(!x)
        cout << "nullptr" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在输出中,我收到了nullptr消息.如果有人能澄清这一点我感激不尽.

eer*_*ika 5

默认情况下,我们如何知道指针未初始化为NULL?

因为我们知道标准说如果默认初始化指针具有自动或动态存储,则它具有不确定的值.引用标准(草案):

[dcl.init]如果没有为对象指定初始化程序,则默认初始化该对象.当获得具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,并且如果没有对该对象执行初始化,则该对象保留不确定的值,直到该值被替换....

并进一步:

[dcl.init]默认初始化T类型的对象意味着:

- 如果T是一个(可能是cv限定的)类类型[指针不是类,所以我们不关心]

- 如果T是数组类型[指针不是数组,所以我们不在乎]

- 否则,不执行初始化.


我已经声明了一个char(也是int)指针而没有初始化它,我得到了空指针.

读取不确定的值具有未定义的行为.引用标准(草案):

[dcl.init] ...如果评估产生不确定的值,则行为是不确定的,除非在下列情况下:[此处不适用的情况]