int *ptr = 0;
int &ref = *ptr;
我在Visual Studio中编写上面的代码,它有效吗?在这里,我指向NULL。 为什么允许这样做?指针可以采用任何地址,NULL或甚至无效的地址。是否允许引用间接指针?
然后为什么说“参考不能为空”。这里的引用不指向NULL
?
答案 0 :(得分:14)
这是不允许的。
用标准的话说:
C ++ 11 8.3.2 / 5:应初始化引用以引用有效的对象或函数。
然而,编译器通常无法诊断,因为指针的有效性是运行时的事情。因此,没有必要诊断错误,可能没有编译器警告,只是未定义的行为。
该标准特别提到了这种情况:
注意:特别是,一个空引用不能存在于定义良好的程序中,因为创建这样一个引用的唯一方法是将它绑定到通过解除引用获得的“对象”空指针,导致未定义的行为。