C++ 标准中是否有任何部分表明 NULL 引用格式错误? 我试图向我的讲师表明(这是针对我正在评分的作业)以下表达式是未定义的行为:
AClass* ptr = 0;
AClass& ali = *ptr;
std::cout << "\n" << (AClass*) &ali << '\n';
我看到的违规行为是取消引用空指针,然后引用空引用。在他用作“正确”示例的程序中,他正在比较取消引用的指针引用的返回:
(AClass*) &ali != (AClass*) 0
作为对象有效性的测试。我认为这是完全未定义的行为;我想从标准中找到对我的解释更具体的引用。
如果我错了,请指出我哪里出错了。
上面的代码没有使用类型为 T 的对象或函数或可以转换为 T 的对象来初始化引用。这违反了“应”。此时,唯一值得怀疑的地方是它是否是未定义的行为,或者这是否符合可诊断的规则,在这种情况下,编译器将需要给出错误消息。不管怎样,这显然是错误的。
8.3.2/1:
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. As described in 9.6, a reference cannot be bound directly to a bit-field]
1.9/4:
Certain other operations are described in this International Standard as undefined
(for example, the effect of dereferencing the null pointer)