如果以下结果导致未定义的行为?
指针2的值应为NULL吗?
double *pointer = 0;
double &value = *pointer;
double *pointer2 = &value;
答案 0 :(得分:6)
是。
double *pointer = 0; // init `pointer` to a NULL pointer value
double &value = *pointer; // dereference it
该标准具体说明了这种情况 - 来自8.3.2 / 4“参考文献”:
引用应初始化为 引用有效的对象或功能。 [注意:特别是空引用 不能存在于明确的定义中 程序,因为唯一的方法 创造这样的参考将是 将它绑定到由...获得的“对象” 取消引用空指针 导致未定义的行为。如 在9.6中描述,参考不能 直接绑定到一个位域。 ]
答案 1 :(得分:3)
是的,当您在第2行执行*pointer
时,您将取消引用空指针。