为什么允许引用指针的间接寻址?
Why reference to indirection to pointer is allowed?
int *ptr = 0;
int &ref = *ptr;
我在 Visual Studio 中写了上面的代码,它有效吗?这里我指的是NULL。
为什么允许?指针可以取任何地址、NULL 甚至无效地址。仍然允许引用指针的间接寻址?
那为什么说"Reference cannot be null."这里,reference不是指向NULL
吗?
不允许。
用标准的话来说:
C++11 8.3.2/5: A reference shall be initialized to refer to a valid object or function.
然而,这不是编译器通常可以诊断的东西,因为指针的有效性是 运行 时间的事情。所以不需要诊断错误,可能没有编译器警告,只是未定义的行为。
标准中特别提到了这种情况:
Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior.
int *ptr = 0;
int &ref = *ptr;
我在 Visual Studio 中写了上面的代码,它有效吗?这里我指的是NULL。 为什么允许?指针可以取任何地址、NULL 甚至无效地址。仍然允许引用指针的间接寻址?
那为什么说"Reference cannot be null."这里,reference不是指向NULL
吗?
不允许。
用标准的话来说:
C++11 8.3.2/5: A reference shall be initialized to refer to a valid object or function.
然而,这不是编译器通常可以诊断的东西,因为指针的有效性是 运行 时间的事情。所以不需要诊断错误,可能没有编译器警告,只是未定义的行为。
标准中特别提到了这种情况:
Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior.