【发布时间】:2011-10-31 03:31:26
【问题描述】:
如果我实际上没有访问被取消引用的“对象”,那么取消引用空指针是否仍然未定义?
int* p = 0;
int& r = *p; // undefined?
int* q = &*p; // undefined?
一个更实际的例子:我可以取消引用空指针来区分重载吗?
void foo(Bar&);
void foo(Baz&);
foo(*(Bar*)0); // undefined?
好的,参考示例根据标准肯定是未定义的行为:
空引用不能存在于定义明确的程序中,因为创建此类引用的唯一方法是将其绑定到通过取消引用空指针获得的“对象”,这会导致未定义的行为强>。
不幸的是,强调的部分是模棱两可的。是 binding 部分导致了未定义的行为,还是 dereferencing 部分就足够了?
【问题讨论】:
-
这一定是个骗子。我知道我们之前已经讨论过这个问题。
标签: c++ object null undefined-behavior dereference