I just read this question with an excellent answer: 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++ 11是否仍然适用?

最佳答案

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

编辑:歧义仍然保留在2012年1月16日的N3337中,但我没有最终标准的副本。根据问题中的评论,看起来问题232的解决方案从未使它成为标准,这显然是因为措辞过于强硬,无法使其成为编译时概念,而不是预期的未定义行为。

07-27 21:06
查看更多