我也可以这样表达:什么构成了可观察行为?
C++标准经常谈论可观察行为,但我不确定程序终止是否是可观察行为的一部分。
也就是说,考虑下面这个程序:
int main() {
for(;;) {}
return 0;
}
符合规范的实现是否允许终止此程序?
因此,编译器可以假定您的循环,在for语句的for-init-statement之外,
*不调用库I/O函数,并且
*不访问或修改易失性对象,并且
*执行没有同步操作(1.10)或原子操作(29条)可以假定实现将终止。[注意:这旨在允许编译器进行转换,例如删除空循环,即使无法证明终止。 — 结束注释]
for
循环将终止,并且由于主体为空,它可以完全优化掉。
是的,程序执行结束是一种可观察行为,因为程序会返回一个错误代码。
正常的终端不显示这些状态,这就是为什么你看不到它们。
程序不能退出,但根据不同的操作系统,它可以被终止,例如信号、中断等。
--编辑--
第二个问题的答案有点错误
正如Martin和Motti在之前的回答中解释的那样:
讨论基于编译器可以安全执行的允许优化。由于明确允许删除死循环,因此编译器可以自由地丢弃上面的循环,从而允许程序终止