代码如下。我在VS、clang++和G++上进行了测试,所有这些编译器都显示
1 << 32
和1 << i
(其中i为32)是不同的。我查看了汇编代码,似乎编译器在编译时计算1 << 32
的结果。我认为这种不一致应该是一个bug或者只是C++的另一个未定义行为。#include <iostream>
int main(int argc, char *argv[])
{
std::cout << (1 << 32) << std::endl;
int i = 32;
std::cout << (1 << i) << std::endl;
return 0;
}
结果:
clang++:
1 << 32:73832
1 << i:1
g++:
1 << 32:73832
1 << i:1