引用不能为NULL或者它可以为NULL?

Zia*_*man 9 c++ oop

我从维基百科上读到:

"引用不能为null,而指针可以; 每个引用都指某个对象,尽管它可能有效也可能无效."

但我不相信因为下面的代码看看它编译器没有给出错误:

class person
{
  public:
    virtual void setage()=0;
};

int main()
{
  person *object=NULL;
  person &object1=*object;
}
Run Code Online (Sandbox Code Playgroud)

请详细说明这一点.

小智 20

在你的代码中:

person *object=NULL;
person &object1=*object;
Run Code Online (Sandbox Code Playgroud)

你取消引用一个NULL指针,所以你得到未定义的行为.并回答你的问题,没有NULL引用这样的东西.

并且为了解决问题的其他部分,仅仅因为程序编译,不能保证它是正确的或它将起作用.C++编译器甚至不需要尝试诊断代码包含的错误类型.


Tom*_*ana 10

说话person &object1=*object与说法不是一回事person &object1=NULL.可能编译器不够聪明,无法发现您正在解除引用空指针,但无论如何您都会遇到运行时错误.所以它们仍然是真实的;)


Cha*_*ese 5

你可以有一个空引用,不知道为什么有人会说,否则,这是某些操作的令人讨厌的副作用。您只是无法直接创建一个。

  • *在实践中*您可以获得 NULL 引用。每当有人说“你*不能*有NULL引用”时,它应该读作*在格式良好的程序中*。除了取消引用 NULL 指针之外,还可以创建一个引用,以便通过自初始化来实现“&ref == NULL”:“int& ref = ref;”(结果可以是任何内容,我想包括 NULL)。- 我不认为涵盖问题的务实方面有什么问题,但你的回答是模糊的、信息不足且有争议的(“尽管每个人都这么说,[这里有点胡言乱语]”)。 (5认同)
  • 看到反对票我不应该感到惊讶,我总能说出什么会激怒这个星球上那些自以为无所不知却一无所知的愚蠢人们。 (2认同)