取消引用指向未使用的引用的NULL指针;这也是“未定义的行为”吗?

时间:2016-10-24 11:12:35

标签: c++ c++11 reference undefined-behavior nullptr

在使用最新g ++编译的大型项目中,遵循“--->”的行为一直被观察到:

void somewhere ()
{
  T* pt = find(x); // returns `nullptr` for `x`
  foo(*pt);
}

void foo (T& t)  // many times `t` is created from `pt = nullptr`
{
  if(condition)
    t.set(0);  // ---> But app crashes, only if this is touched
}

表示find(x)始终将nullptr返回pt。但除非condition成立,否则应用程序不会崩溃。假设,当conditionpt时,如果nullptr永远不为真,那么该应用仍处于UB状态吗?

换句话说,如有问题:
是否将一个NULL指针解引用到一个从未被读取/写入的引用中,仍然是一个未定义的行为?

由于空指针本身不是UB,而只是访问它。类似地,从这样的指针(类似地“空引用”)派生的引用不应该以相同的方式起作用!

0 个答案:

没有答案