mal*_*ute 8 c++ comparison compiler-warnings
我有以下代码:
unsigned int a;
if (a > numeric_limits<int>::max())
do_stuff();
Run Code Online (Sandbox Code Playgroud)
编译时,gcc抱怨
警告:"签名和未签名之间的比较"
好的,我明白了
但是,使用以下代码:
unsigned int a;
if (a > (numeric_limits<int>::max()))
do_stuff();
Run Code Online (Sandbox Code Playgroud)
警告不再显示,我真的不知道为什么......这种行为是否有任何合理的原因,或者我做错了什么?!
App*_*ker -1
int答案在于 gcc 处理和 的方式unsigned int。
unsigned int并且int都存储一个 2 字节值。它们之间的区别是unsigned int不支持负值。它只能存储 0-65,535 之间的值。当 GCC 看到 int 和 unsigned int 之间的比较时,它会将 int 转换为正数。例如,如果 的值int是 -2 ,它会将其转换为 2。但是如果 int 前面有 () 运算符。(整数)。GCC 将其解释为正数(但仍将其转换)并且不发出警告。