在使用最新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
成立,否则应用程序不会崩溃。假设,当condition
为pt
时,如果nullptr
永远不为真,那么该应用仍处于UB状态吗?
换句话说,如有问题:
是否将一个NULL指针解引用到一个从未被读取/写入的引用中,仍然是一个未定义的行为?
由于空指针本身不是UB,而只是访问它。类似地,从这样的指针(类似地“空引用”)派生的引用不应该以相同的方式起作用!