C+0x中的“while(1);”优化
#include <iostream>int main() { while(1) ; std::cout << "Hello" << std::endl;}
6.5/5
一个循环,在for语句的for init语句之外,
不调用库I/O函数,以及 不访问或修改易失性对象,并且 不执行同步操作(1.10)或原子操作(第29条)
可由实现假定终止。[注意:这是为了允许编译器转换-mdash;,例如删除空循环,即使终止不能被证明。-尾注]
编辑:
不幸的是,没有使用“未定义的行为”这个词。然而,每当标准说“编译器可以假定P”时,这就意味着具有非-P属性的程序具有未定义的语义。
endless: goto endless;
通过编写循环,程序员正在断言 任一循环具有可见行为(执行I/O、访问易失性对象或执行同步或原子操作), 或它最终会终止。如果我违反了这个假设,写了一个没有副作用的无限循环,我就是在欺骗编译器,而我的程序的行为是没有定义的。(如果我幸运的话,编译器可能会警告我。)语言不提供(不再提供?)一种在没有可见行为的情况下表示无限循环的方法。
该实现可能假定任何线程最终都将执行以下操作之一:
终止, 调用库I/O函数, 访问或修改易失性对象,或 执行同步操作或原子操作。
goto
Cats萌萌
牛魔王的故事
小怪兽爱吃肉
相关分类