我看到了这个讨论 - Checking for a null object in C++令我惊讶的是,没有人谈论何时引用可以指向空对象。在我们的代码中,我们经常使用空对象。有如下函数返回 nullObj。
const Obj&
nullObj()
{
static obj* nullPtr = NULL;
return static_cast< const Obj&>(*nullPtr);
}
实际上,当我再次查看代码以提出这个话题时,我对上面的代码是如何工作的有一些疑问:
*nullPtr
怎么可能 - 是不是因为 nullPtr 是一个静态对象,它是在堆上分配的内存,因此它保证有一些空间并且既然我们要返回对 obj 的 const 引用,编译器会创建一个临时对象(对某种 nullObj 吗??)还是将 const 引用充当 nullPtr 本身的别名?
最佳答案
I was surprised that no one talked about when reference can point to a null object
那是因为在正确的程序中它不能。
您取消引用空指针的函数具有未定义的行为。例如,允许编译器发出在该点导致崩溃的代码。
但是,UB 的一种可能影响是代码按照人们的预期行事。所以可能会出现空引用。我从来没有遇到过,但是如果你遇到了,那就意味着代码中存在严重的逻辑错误。
您显示的所有 null-object-reference 函数的使用都是逻辑错误。
您最好了解这些用途并进行修复。 ;-)
干杯,
关于c++ - 指向空对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421083/