【发布时间】:2019-11-09 19:41:21
【问题描述】:
我试图了解整数提升和比较在 C++ 应用程序中的工作原理。
#include <cstdint>
int main(void)
{
uint32_t foo = 20;
uint8_t a = 2;
uint8_t b = 1;
uint8_t c = 5;
if(foo == b*c) {}
if(foo == a) {}
if(foo == a + c) {}
if(foo == a + b*c) {}
return 0;
}
仅在最后一次比较时,我会收到编译器警告:“有符号和无符号整数表达式之间的比较 [-Wsign-compare]”。
为什么这只发生在最后一种情况,而其他情况没有?
【问题讨论】:
-
b * c、a + c和a + b*c都被提升为ints。由于某种原因,您的编译器只对其中一个发出警告。 -
哪个编译器,哪个版本,以及什么命令行开关?
-
@EricPostpischil,这可以在 g++ 6.3.0 中使用
-Wall重现。还有 g++ 7.4.0。
标签: c++ integer-promotion