-O2がない場合、このコード84 84
は出力されます。O2フラグがある場合、出力は84 42
です。gcc 4.4.3.
コードは、64ビットLinuxプラットフォームを使用してコンパイルされました。次のコードの出力が異なるのはなぜですか?
-Osを使用してコンパイルすると、出力は次のようになります。0 42
#include <iostream>
using namespace std;
int main() {
long long n = 42;
int *p = (int *)&n;
*p <<= 1;
cout << *p << " " << n << endl;
return 0;
}