C ++从空指针调用非虚拟非静态方法,而不访问成员:这是否可以保证工作?

时间:2013-06-21 14:54:12

标签: c++ function pointers null member

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

我知道它在大多数情况下会起作用,但这是否有保证?这样,我可以确保永远不会发生空指针异常,并避免在调用者代码的许多地方测试空指针。这是为了紧凑,我现在不打算这样做,但我很想知道是否有任何标准可以保证这一点......

谢谢!

4 个答案:

答案 0 :(得分:4)

取消引用nullptr 未定义的行为。期!
无论是否在某个特定实现上工作都无关紧要,行为无法保证。

答案 1 :(得分:0)

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

所以,只有在你的实现定义案例的某些行为的情况下,你才可以,因为这是一种可能性(虽然我从未在现实生活中遇到过它)。

(我希望您理解观察某些内容与定义的内容不同。)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这里有一些有趣的答案: When does invoking a member function on a null instance result in undefined behavior?

此外,该标准没有提供有关调用成员虚拟功能的机制的提示。通常只需将'this'作为隐藏函数参数传递,实际上不会取消引用指针和工作。但是,使用vtable甚至可以实现非虚函数,在这种情况下会崩溃。

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