3

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

我刚刚阅读了这个问题并给出了一个很好的答案:何时在空实例上调用成员函数会导致未定义的行为?

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

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

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

在 C++0x 中,从 n3126 开始,歧义仍然存在

这仍然适用于最终的 C++11 吗?

4

1 回答 1

5

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

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

于 2013-01-23T21:51:51.150 回答