为什么允许引用间接指向?

Pra*_*ari 1 c++ pointers reference

int *ptr = 0;
int &ref = *ptr;
Run Code Online (Sandbox Code Playgroud)

我在Visual Studio中编写上面的代码,它的工作原理?在这里,我指向NULL.为什么允许这样做?指针可以采用任何地址,NULL或甚至无效的地址.是否允许引用间接指针?

那么为什么说"参考不能为空".在这里,是指不参考NULL

Mik*_*our 14

这不被允许.

用标准的话来说:

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

但是,通常情况下,编译器无法进行诊断,因为指针的有效性是运行时的事情.所以没有要求诊断错误,可能没有编译器警告,只是未定义的行为.

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

注意:特别是,在一个定义良好的程序中不能存在空引用,因为创建这样一个引用的唯一方法是将它绑定到通过解引用空指针获得的"对象",这会导致未定义的行为.

  • 这可能是一个纯粹的语言问题,但可以说,取消引用空指针会导致*不*导致未定义的行为.另一方面,委员会似乎反对引入空引用.这意味着,两者是无关的.见http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 (3认同)