如果我对C++ ISO规范(5.8.2和5.8.3节)的阅读正确的话,负有符号类型的右移是实现相关的,左移则是未定义行为。
因此,我想在我们使用g++ 4.8.2编译的遗留源代码中找到有符号类型的移位操作。
不幸的是,在手册中我找不到这样的选项。例如,我可以使用"g++ -Wall -Wextra -pedantic"编译此代码而没有警告:
因此,我想在我们使用g++ 4.8.2编译的遗留源代码中找到有符号类型的移位操作。
不幸的是,在手册中我找不到这样的选项。例如,我可以使用"g++ -Wall -Wextra -pedantic"编译此代码而没有警告:
int si = -1;
int left = si << 1; // -2 (multiplication by 2, sign is preserved)
int right = si >> 1; // -1 (no change, only 1s)
有人能告诉我是否存在这样的警告,如果不存在,为什么gcc不关心它呢?