我可以从空指针调用类的非静态非虚方法吗?然后,成员函数将测试这是否== nullptr,如果是真的则立即返回。
我知道它在大多数情况下会起作用,但这是否有保证?这样,我可以确保永远不会发生空指针异常,并避免在调用者代码的许多地方测试空指针。这是为了紧凑,我现在不打算这样做,但我很想知道是否有任何标准可以保证这一点......
谢谢!
答案 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