考虑以下程序:
using namespace std;
int main()
{
uint8_t b = 150;
int8_t a = -10;
if (a>b){
cout << "greater" << endl;
}
else{
cout << "less" << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在在线 C++14 编译器中,它打印less. 我在使用 x86-64 gcc 12.2 的编译器资源管理器中得到相同的结果
根据文档
否则,操作数具有整数类型(因为此时升级了 bool、char、char8_t、(C++20 起) char16_t、char32_t、wchar_t 和无作用域枚举)产生普通类型,如下:
- 如果两个操作数均带符号或均无符号,则具有较小转换等级的操作数将转换为具有较大整数转换等级的操作数。
- 否则,如果无符号操作数的转换等级大于或等于有符号操作数的转换等级,则有符号操作数将转换为无符号操作数的类型。
- 否则,如果有符号操作数的类型可以表示无符号操作数的所有值,则无符号操作数将转换为有符号操作数的类型。
- 否则,两个操作数都将转换为有符号操作数类型的无符号对应项。
在使用 x86-64 gcc 12.2 的编译器资源管理器中,我对其进行了编译并得到以下结果:
.LC0:
.string "greater"
.LC1:
.string "less"
main:
push rbp
mov rbp, rsp
sub rsp, 16 …Run Code Online (Sandbox Code Playgroud)