何时在 null 实例上调用成员函数会导致 C++11 中出现未定义的行为

When does invoking a member function on a null instance result in undefined behavior in C++11?

本文关键字:C++11 未定义 实例 null 调用 函数 成员 何时      更新时间:2023-10-16

可能的重复项:
何时在 null 实例上调用成员函数会导致未定义的行为?

我刚刚读到这个问题,有一个很好的答案:什么时候在空实例上调用成员函数会导致未定义的行为?

基本上,以下代码是未定义的行为吗?

struct foo { static void bar() { } };
foo *p = nullptr;
p->bar();

根据链接的帖子,这可以用不同的方式解释,一个是UB,一个不是。

在 C++0x 中,截至 n3126,歧义仍然存在

这在最终C++11中仍然成立吗?

您链接的问题清楚地表明,在对标准的严格或弱解释中,您显示的代码都是未定义的行为。歧义(可能)只存在于静态函数中(您的问题专门针对非静态函数)。

编辑:歧义仍然存在于日期为2012-01-16的N3337中,但我没有最终标准的副本。根据问题中的评论,似乎问题 232 的决议从未进入标准,显然是因为措辞过于强硬,使其成为编译时概念而不是预期的未定义行为。