sho*_*osh 33 c++ null pointers reference
我想知道C++标准对这样的代码的说法:
int* ptr = NULL;
int& ref = *ptr;
int* ptr2 = &ref;
Run Code Online (Sandbox Code Playgroud)
在实践中,结果是ptr2NULL,但我想知道,这只是一个实现细节还是在标准中明确定义?
在不同的情况下,取消引用NULL指针应该导致崩溃,但是在这里我取消引用它以获得由编译器作为指针实现的引用,因此实际上没有实际的解除引用NULL.
Mic*_*urr 46
取消引用NULL指针是未定义的行为.
事实上,该标准将这种确切的情况称为注释(8.3.2/4"参考文献"):
注意:特别是,在一个定义良好的程序中不能存在空引用,因为创建这样一个引用的唯一方法是将它绑定到通过解引用空指针获得的"对象",这会导致未定义的行为.
旁白:有一次我意识到NULL指针可以以明确定义的方式"解引用"作为操作sizeof符的操作数,因为操作数sizeof实际上没有被计算(所以dereference实际上从未实际发生).
取消引用 NULL 指针是 C++ 标准中明确未定义的行为,因此您看到的是特定于实现的。
复制 C++0x 草案标准中的 1.9.4(这方面与之前的标准类似):
某些其他操作在本国际标准中被描述为未定义(例如,取消引用空指针的影响)。[注:本国际标准对包含未定义行为的程序的行为没有任何要求。-尾注]
| 归档时间: |
|
| 查看次数: |
27324 次 |
| 最近记录: |