【发布时间】:2015-06-30 01:07:31
【问题描述】:
当我用 gcc 编译以下代码时:
int main()
{
unsigned char c = 1;
c <<= 1; // WARNING ON THIS LINE
return 0;
}
我收到此警告:
conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
为什么?这段代码有什么问题?实际上,我真的可以在 unsigned char 变量上使用运算符 <<= 吗?
编译命令:
g++ test.cpp -Wconversion -o test.exe
【问题讨论】:
-
在我看来,对于编译器编写者和用户来说,这都是“该死,如果你不这样做”的情况之一。作为用户,您所写的内容是干净的,并且产生了预期的答案,并且通常完全没有例外。它不需要额外的语言混乱来使其更难理解。作为编译器编写者,技术上存在缩小转换,因此警告在技术上是正确的。但我不禁觉得,在这种情况下,或者涉及
short的类似情况(估计也触发了警告),警告真的没有建设性。
标签: c++ gcc bitwise-operators unsigned-char