【问题标题】:When does invoking a member function on a null instance result in undefined behavior in C++11? [duplicate]何时在空实例上调用成员函数会导致 C++11 中的未定义行为? [复制]
【发布时间】:2013-01-07 12:51:52
【问题描述】:

可能重复:
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 中仍然成立吗?

【问题讨论】:

  • 引用链接问题中的答案:“通过空指针调用成员函数总是未定义的行为”。
  • 仅仅因为它可能被允许并不意味着你应该这样做。
  • @helami 你误读了你链接的帖子。
  • @Yakk:怎么会这样?他想知道这些答案在 C++11 中是否仍然正确。
  • @Non-StopTimeTravel:Jame's McNellis comment 已经回答了。

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


【解决方案1】:

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

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

【讨论】:

  • 问题已更改,现在指的是static函数。
猜你喜欢
  • 2011-01-29
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多