空引用 - C++ 标准中的位置[重复]

问题描述 投票:0回答:2

C++ 标准中是否有任何部分表明 NULL 引用格式错误? 我试图向我的讲师表明(这是针对我正在评分的作业)以下表达式是未定义的行为:

AClass* ptr = 0;
AClass& ali = *ptr;
std::cout << "\n" << (AClass*) &ali << '\n';

我看到的违规行为是取消引用空指针,然后引用空引用。在他用作“正确”示例的程序中,他正在比较取消引用的指针引用的返回: (AClass*) &ali != (AClass*) 0

作为对象有效性的测试。我认为这是完全未定义的行为;我想从标准中找到对我的解释更具体的引用。

如果我错了,请指出我哪里出错了。

c++ pointers null reference standards
2个回答
6
投票

上面的代码没有使用类型为 T 的对象或函数或可以转换为 T 的对象来初始化引用。这违反了“应”。此时,唯一值得怀疑的地方是它是否是未定义的行为,或者这是否符合可诊断的规则,在这种情况下,编译器将需要给出错误消息。不管怎样,这显然是错误的。


0
投票

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)

© www.soinside.com 2019 - 2024. All rights reserved.