【发布时间】:2012-03-18 09:03:34
【问题描述】:
可能重复:
When does invoking a member function on a null instance result in undefined behavior?
C++ standard: dereferencing NULL pointer to get a reference?
假设我有课:
class A
{
public:
void foo() { cout << "foo"; }
};
然后像这样调用 foo:
A* a = NULL;
a->foo();
我怀疑这会调用未定义的行为,因为它等效于 (*a).foo()(或者是吗?),并且取消引用 NULL 是 UB,但我找不到参考。谁能帮我吗?还是定义了?
不,函数不是virtual。不,我没有访问任何成员。
编辑:我投票结束这个问题,但不会删除它,因为我自己找不到重复的内容,我怀疑这个标题可能更容易被其他人找到。
【问题讨论】:
-
我认为标准中没有任何限制,例如,通过 vtable 查找实现 all 成员函数。因此,在这样的实现中,您确实会取消对 NULL 的引用(而不仅仅是静态绑定到
a::foo)。不过,我无法提供标准报价。 -
所以问题是:“什么是引用说你不能取消引用 NULL 指针?”
-
本帖对题目有详细分析:stackoverflow.com/questions/669742/…
-
[in this post][1] 对此主题进行了广泛的讨论。 [1]:stackoverflow.com/questions/2474018/…