C ++调用来自空指针的非虚非静态方法,而无需访问成员:被这保证工作? [重复](C++ Cal

2019-10-18 06:48发布

这个问题已经在这里有一个答案:

  • 它是法律/定义良好的C ++调用不通过一个空指针访问成员非静态方法? 5个回答
  • 什么时候对空实例调用的成员函数导致未定义的行为? 2个回答

我可以从一个空指针调用类的非静态,​​非虚方法? 然后,成员函数请将此== nullptr测试,并立即返回,如果这是真的。

我知道它会在大多数情况下,但是这是有保证的结果呢? 这样的话,我可以保证空指针异常从未发生过,并且避免在主叫用户代码的很多地方空指针测试。 这对于紧凑,我不打算这样做的权利,但我很好奇,想知道是否有标准将保证这个工作...

谢谢!

Answer 1:

解引用一个nullptr不确定的行为 。 期!
无论是工作还是不能在一个特定的实现是无关紧要的,行为是不能保证。



Answer 2:

标准expliticly提到取消引用NULL指针未定义行为。 使用opearator - >取消引用指针到左。

所以你只有在情况还好吧,如果你的实现定义一些行为的情况下,因为它是一种可能性(虽然我从来没有在现实生活中遇到它尚未)。

(我希望你明白,观察到的东西是不一样的被定义。)



Answer 3:

始终避免调用一个空指针,你通常会用一个核心转储结束



Answer 4:

这里有一些很有意思的答案: 什么时候在一个空实例导致不确定的行为调用成员函数?

此外,该标准没有给出关于该机制成员调用虚函数的提示。 它通常被刚好路过“这个”作为一个隐藏的功能参数完成,这在实践中不取消引用指针和工作。 然而,似乎可以实现,甚至有虚表,在这种情况下会崩溃的非虚拟函数。

有趣的是,微软功能依赖于这种行为:) http://msdn.microsoft.com/en-us/library/d64ehwhz%28v=vs.80%29.aspx



文章来源: C++ Call a non-virtual non-static method from a null pointer, without accessing members : is this guaranteed to work? [duplicate]