在c / c ++中添加两个bool值

时间:2013-06-18 21:27:55

标签: c++

我试图将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'?

2 个答案:

答案 0 :(得分:18)

导致转换的不是溢出,这是你完全算术的事实。在C ++(和行为源自的C)中,内置类型的基本算术运算符的操作数在进行计算之前会经过一组明确定义的提升。这些规则的基本原则(略微简化)是任何小于int的类型都会被提升为int

您的后续问题具有相同的答案 - 您的short小于int,因此在添加之前会将其提升为int

This StackOverflow question有几个答案可以更详细地描述促销活动。

答案 1 :(得分:1)

首先,sizeof并未告诉您结果已转换为int值。 bool与[{1}}具有相同的大小是允许的,而且实际上并非罕见。

但是你确实会在这里获得int,但这与值无关(实际上,类型不能取决于值,因为通常在运行时之前不会知道这些值,而必须确定类型在编译时)。

在添加之前,int值被提升为bool,因为int被定义为整数类型,整数类型小于bool 所有升级为int。然后,您添加三个int值(无论您使用的int值是什么,都不会溢出的操作,因为bool保证大于3)。