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消息.如果有人能澄清这一点我感激不尽.
默认情况下,我们如何知道指针未初始化为NULL?
因为我们知道标准说如果默认初始化指针具有自动或动态存储,则它具有不确定的值.引用标准(草案):
[dcl.init]如果没有为对象指定初始化程序,则默认初始化该对象.当获得具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,并且如果没有对该对象执行初始化,则该对象保留不确定的值,直到该值被替换....
并进一步:
[dcl.init]默认初始化T类型的对象意味着:
- 如果T是一个(可能是cv限定的)类类型[指针不是类,所以我们不关心]
- 如果T是数组类型[指针不是数组,所以我们不在乎]
- 否则,不执行初始化.
我已经声明了一个char(也是int)指针而没有初始化它,我得到了空指针.
读取不确定的值具有未定义的行为.引用标准(草案):
[dcl.init] ...如果评估产生不确定的值,则行为是不确定的,除非在下列情况下:[此处不适用的情况]
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |