1

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

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

谢谢!

4

4 回答 4

4

取消引用 anullptr未定义的行为。时期!
它是否适用于一个特定的实现是无关紧要的,行为是不能保证的。

于 2013-06-21T14:55:44.550 回答
0

该标准明确提到取消引用 NULL 指针是未定义的行为。使用操作符 -> 取消引用向左的指针。

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

(我希望你明白,观察某事不等于被定义。)

于 2013-06-21T15:00:19.357 回答
0

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

于 2013-06-21T15:04:22.647 回答
0

这里有一些有趣的答案: 什么时候在空实例上调用成员函数会导致未定义的行为?

此外,该标准没有提示调用成员虚函数的机制。它通常通过将“this”作为隐藏函数参数传递来完成,这实际上不会取消引用指针并起作用。但是,似乎可以使用 vtable 实现非虚拟功能,在这种情况下会崩溃。

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

于 2013-06-21T17:00:56.027 回答