来自msdn博客的这篇文章的一个例子让我做了自动收报机:
它说这个功能:
void unwitting(bool door_is_open)
{
if (door_is_open) {
walk_on_in();
} else {
ring_bell();
// wait for the door to open using the fallback value
fallback = value_or_fallback(nullptr);
wait_for_door_to_open(fallback);
}
}
Run Code Online (Sandbox Code Playgroud)
可以优化到这一个:
void unwitting(bool door_is_open)
{
walk_on_in();
}
Run Code Online (Sandbox Code Playgroud)
因为调用value_or_fallback(nullptr)是未定义的行为(这在本文前面已经证明).
现在我不明白的是:运行时只有在到达该行时才进入未定义的行为.在运行时进入UB之前,第一段的所有可观察效果是否都应该被解决,这不应该发生在之前/之后发生的概念吗?