C ++标准问题

时间:2010-10-04 19:34:56

标签: c++

如果以下结果导致未定义的行为?

指针2的值应为NULL吗?

double *pointer = 0;
double &value = *pointer;
double *pointer2 = &value;

2 个答案:

答案 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时,您将取消引用空指针。