【发布时间】:2020-10-01 18:44:05
【问题描述】:
空指针的地址计算是否在 C++ 中定义了行为?这是一个简单的示例程序。
struct A { int x; };
int main() {
A* p = nullptr;
&(p->x); // is this undefined behavior?
return 0;
}
谢谢。
EDITthis other question 中涵盖了下标。
【问题讨论】:
-
在我看来像 UB。 (对于第一个例子,你的意思是 ` &(p->x);` 吗?)
-
@cigien 感谢您的指点(不是双关语)。这回答了第二个问题,但不是关于成员访问的第一个问题。
-
肯定是UB,
p指向的地方没有对象,所以即使在你取地址之前,做p->x和(*p).x一样,也就是UB。 -
您在这里提出了两个不同的问题。成员访问和下标不一样。其中一个问题比另一个问题更微妙。
-
这能回答你的问题吗:stackoverflow.com/questions/2474018/…
标签: c++ language-lawyer dereference null-pointer