我本可以将其称为什么构成可观察的行为?
C ++标准谈论了很多关于可观察行为的内容,但我不确定程序终止是否是可观察行为的一部分。
即,给出如下程序:
int main() {
for(;;) {}
return 0;
}
是否允许终止此程序?
答案 0 :(得分:6)
是的,编译为上面的代码生成一个空的主体是合法的(因此几乎立即终止)。
C ++ 0x FCD说6.5说(特别注意 note ):
在for语句的情况下,for-init-statement之外的循环,
*不调用库I / O功能,以及
*不访问或修改易失性对象,以及
*不执行同步操作(1.10)或原子操作(第29条)可以由实现假定终止。 [注意:这是为了允许编译器转换,例如删除空循环,即使无法证明终止也是如此。 - 结束记录]
因此,编译器可以假设您的for
循环将终止,并且由于正文为空,因此可以完全优化它。
草稿中的引文是从this question复制而来,并根据我的副本进行了验证。
答案 1 :(得分:2)
是的,完成程序的执行是一种可观察的行为,因为程序返回错误代码。
普通终端没有显示这种状态,这就是你没有“看到”它的原因。
程序无法退出,但根据不同的操作系统,它可以通过例如信号,中断来终止......
- 编辑 -
第二个问题的答案有点错误
Martin和Motti在previous answer中解释道:
讨论基于允许 编译器可以优化 安全地执行。自从删除了 死循环是明确允许的 编译器可以免费上述垃圾 循环因此允许程序 终止