我试着把 bool 值加在一起,说:
bool i = 0, j = 0, k = 0;
cout << sizeof(i + j + k) << endl;
结果为 4,这意味着结果被转换为 'int' 值。
我想问:这是C/C++的标准操作吗?编译器是否总是保证在溢出时将临时值转换为更大的类型?谢谢!
感谢您的回答,一个跟进问题:
说,如果我这样做:
unsigned short i = 65535, j = 65535;
cout << sizeof(i + j) << endl;
结果是4。为什么它被提升为'int'?
最佳答案
导致转换的不是溢出,而是你做算术的事实。在 C++(以及行为起源的 C)中,内置类型的基本算术运算符的操作数在进行计算之前经过一组定义明确的提升。这些规则中最基本的(有些简化)是任何小于 int
的类型都会被提升为 int
。
你的后续问题有相同的答案 - 你的 short
比 int
小,所以它在添加之前被提升为 int
发生。
This StackOverflow question有几个答案更详细地描述了促销事件。
关于c++ - 在 c/c++ 中添加两个 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17179287/