我试着将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'?
Car*_*rum 19
这不是导致转换的溢出,而是你完全算术的事实.在C++(和行为源自的C)中,内置类型的基本算术运算符的操作数在进行计算之前会经过一组明确定义的提升.这些规则的基本原则(略微简化)是任何小于a的类型int都被提升为int.
您的后续问题具有相同的答案 - 您的答案short小于a int,因此int在添加之前将其提升为a .
此StackOverflow问题有几个答案,更详细地描述了促销.