程序终止C++程序是否可观察到行为?

Mar*_* Ba 13 c++ c++11

我本来可以将这个措辞称为什么构成可观察的行为?

C++标准谈论了很多关于可观察行为的内容,但我不确定程序终止是否是可观察行为的一部分.

也就是说,给出如下程序:

int main() {
  for(;;) {}
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

是一个符合要求的实现允许终止此程序?

Mot*_*tti 6

是的,编译为上面的代码生成一个空的主体是合法的(因此几乎立即终止).

C++ 0x FCD说6.5表示(特别注意注释):

一个循环,在for语句的情况下,在for-init语句之外,
*不调用库I/O函数,
*不访问或修改volatile对象,
*不执行同步操作(1.10)或原子操作(第29条)

可以通过实现来假设终止.[ 注意:这是为了允许编译器转换,例如删除空循环,即使终止无法证明.- 结束说明 ]

所以编译器可以假设你的for循环终止,并且由于正文是空的,它可以完全优化它.


草稿中的引文是从这个问题中复制出来的,并根据我的副本进行了验证.