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

时间:2013-01-23 21:42:06

标签: c++ c++11 undefined-behavior language-lawyer null-pointer

  

可能重复:
  When does invoking a member function on a null instance result in undefined behavior?

我刚刚用一个很好的答案阅读了这个问题:When does invoking a member function on a null instance result in undefined behavior?

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

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

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

  

在C ++ 0x中,从n3126开始,模糊性仍然存在

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

1 个答案:

答案 0 :(得分:5)

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

编辑:模糊性仍然存在于2012-01-16 N3337,但我没有最终标准的副本。基于该问题中的评论,看起来问题232的解决方案从未成为标准,显然是因为措辞过于强烈,无法使其成为编译时的概念,而不是预期的未定义行为。