1 #include<cstdio> 2 int main(){ 3 int s=0; 4 for(int i=0;i<200000;++i) 5 s+=i; 6 printf("%d %d",s,s<0);} 7 不开 O2 输出:-1474936480 1开 O2 输出:-1474936480 0
为什么呢?编译器想:s 初值大于等于 0,每次都加一个大于等于 0 的数,结果一定不会小于 0,那我就直接把 s<0 优化成 0。自然溢出什么的,反正是未定义行为,我就当它没发生。
int f() { cout<<1<<endl; }
开启了O2优化,类似与这样函数没写返回值,导致陷入一种奇怪的死循环。
标签:int,编译器,等于,大于,优化,O2 From: https://www.cnblogs.com/kfc-v50/p/18151385