对NULL的引用
Reference to NULL
可能重复:
引用不能为NULL,也可以为NULL?
下面的程序是如何成功编译的?
int main()
{
int *ptr = NULL;
int &ref = *ptr;
return 0;
}
在ideone上看到它。
我们可以定义对NULL的引用吗?
您给出的代码将进行编译,因为编译器在编译时不会检查指针的值。但是,取消引用NULL指针是未定义的行为。
这是我过去遇到过的一个问题,它深深地印在了我的记忆中。我的进一步想法可以在这里找到:https://stackoverflow.com/a/57656/5987
摘自C++常见问题解答:
按照C++标准的定义,C++语言认为这是非法的;这就意味着它是非法的。C++标准不需要对此特定错误进行诊断,这意味着您的特定编译器没有义务注意到p为NULL或给出错误消息,但它仍然是非法的。C++语言也不需要编译器生成在运行时会爆炸的代码。
您取消引用空指针。您的编译器并没有被要求抱怨这种格式错误的程序。然而,这并不意味着在运行此程序时不会发生任何不好的事情。
来自C++03 8.3.2/4:
注意:特别是,null引用不能存在于定义良好的程序中,因为创建这样一个引用的方法是将其绑定到通过取消引用空指针获得的"对象",这会导致未定义的行为。
否。ptr是一个有地址的指针。您将该指针设置为null。因此,该指针的值为null。但是指针本身有一个地址。引用被设置为指针的地址,而不是其值。
现在,对NULL本身的引用将失败。例如:
int &ref = &NULL; // fail
相关文章:
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 如何在C++中返回Null作为引用
- 如何引用 obj1 并在 NULL 时调用 show 方法
- 排序时引用绑定到 'value_type' 类型的 null 指针
- 取消引用会导致崩溃,即使对于非 NULL 指针也是如此,原因也是如此
- 如果 null 不是有效值,则使参数成为引用而不是指针
- 我可以根据null或特定类型的值检查引用吗
- 指针引用const null值
- 引用绑定到类型 'struct value_type' 的 null 指针
- 为什么我们需要在move构造函数中将右值引用设置为null
- 检查指针是否为null,然后在同一if语句中取消引用它,这样安全吗
- 如果指针设置为 NULL,则对它的任何引用都不会或通过它也是 NULL
- cppcheck null指针取消引用:m_buffer-否则,针对null进行检查是多余的
- 引用地址如何在C++变为 NULL
- 自定义 std::shared_ptr 或 boost::shared_ptr 以在 NULL 取消引用时引发异常
- IID_PPV_ARGS和取消引用NULL
- 通过解引用NULL指针来赋值引用
- 取消引用 NULL 指针是否保证在 C/C++ 中使程序崩溃
- 在c++中解引用NULL指针
- clang++ 4.1,在解引用NULL时没有崩溃