我希望你能帮我翻译一下C++中的隐式转换规则,这与IT技术有关。当两种基本类型之间只有一个操作符时,"低类型"会提升为"高类型"。例如:
int a = 5;
float b = 0.5;
std::cout << a + b << "\n";
因为'a'被提升为浮点类型,所以应该打印5.5。我也明白无符号类型比有符号类型更高级。
int c = 5;
unsigned int d = 10;
std::cout << c - d << "\n";
由于'c'被提升为无符号整数,而无符号类型在小于零时会循环,因此打印出4294967291这个大数字。
然而,在下面的情况中,我不明白为什么我得到的是-105而不是一个正数。
#include <iostream>
int main(void) {
unsigned char a = 150;
std::cout << static_cast<int>(a - static_cast<unsigned char>(255)) << "\n";
return 0;
}
我猜这段代码的作用是:
a - static_cast<unsigned char>(255)
应该得到一个正数,因此最终的转换(转换为int)不应该影响最终结果,对吗?
int
小的整数类型,包括char,在执行你在帖子开头描述的规则之前都会被提升为int
)。 - M.MC
标签。 - Mark Benningfielda - static_cast<unsigned char>(255)
是正数,但从未费心测试它。你应该这样做。 - user743382