int a = -1;
unsigned int b = 1;
std::cout << (a>b) << std::endl; // true
char c = -1;
unsigned char d = 1;
// 以下输出结果不固定,C编译器为true,C++编译器为false;
std::cout << (d>d) << std::endl;
char与unsigned char的比较结果不同的原因是:
C++中进行数据运算或者比较时,小于int类型的数据会先进行整形提升,即将数据类型提升到int,如果int无法装下则提升到unsigned int或者更大。
而C语言中则没有整形提升,因此两种编译器结果不一致。
注:以上代码是在菜鸟教程上进行的测试,不同的编译器可能会导致不同的行为,纯C编译也有可能会做整形提升的处理。
本篇文档主要提醒这种编码不规范的写法可能会引起的bug。
以下是C++的部分文档说明: