如果我正确地阅读了C++ ISO规范(第5.8.2和5.8.3节),则负签名类型的右移是特定于实现的,并且是左移未定义的行为.
因此,我想在我们使用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)
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我是否有这样的警告,如果没有,为什么gcc不关心它?