为什么允许引用指向指针的间接寻址


int *ptr = 0;
int &ref = *ptr;

我在Visual Studio中编写了上面的代码,它有效吗?在这里,我指向 NULL。为什么允许?指针可以采用任何地址,NULL 甚至无效地址。仍然允许引用指针的间接性?

那为什么说"引用不能为空"。在这里,参考不是指向NULL吗?

这是

不允许的。

用标准的话说:

C++11 8.3.2/5:引用应初始化为引用有效的对象或函数。

但是,编译器通常无法诊断它,因为指针的有效性是运行时的事情。因此,不需要诊断错误,可能也没有编译器警告,只是未定义的行为。

标准特别提到了这种情况:

注意:特别是,null 引用不能存在于定义良好的程序中,因为创建此类引用的唯一方法是将其绑定到通过取消引用 null 指针获得的"对象",这会导致未定义的行为。

最新更新