2016-11-29 96 views
1

我有一个变量,它可以从0到1不同,所以我想用一个bool类型用于保持该值。你可以使用C++中的bool和int操作符执行哪些操作?

C++基于这种想法是什么操作都可以做我的第一个操作数布尔秒的整数或浮点数的类型?

例如,这是否有效?

bool exists; 
int value; 
(...) 
value += exists; 
value *= exists; 

如果是的话,直到C++这些值转换成他们二进制占有并没有发现问题,这样做对那些二进制数操作,它是有效做业务不同的操作数

+0

有意思,'bool b = false; b + = 10;'编译在gcc上,我想知道这是什么意思,尽管 – Slava

+0

@Slava,它意味着'bool'被提升为'int',结果为0,而算术运算结果为10,而不是转换为' bool'结果为1. – SergeyA

+0

@Sergey有趣,'++ b'又如何呢?编译器会生成'b = true;'而不是在这种情况下? – Slava

回答

3

是存在这些操作,它们在C++标准部13.6实测值(注意,bool为一个整数类型,这使得它的运算式为好):

对于每一个三元组(LVQR),其中L是一个算术类型,VQ要么volatile或为空,并且R是促进的算术类型,存在的形式的候选操作员功能

VQ L & operator=(VQ L &, R); 
VQ L & operator*=(VQ L &, R); 
VQ L & operator/=(VQ L &, R); 
VQ L & operator+=(VQ L &, R); 
VQ L & operator-=(VQ L &, R); 

语义是在5.18节中定义:

形式E1op=E2的表达的行为不同的是E1只计算一次相当于E1 = E1opE2。在+=和 - =中,E1应具有算术类型或是指向可能符合cv限定的完全定义的对象类型的指针。在所有其他情况下,E1应具有算术类型。

如果左操作数是类的类型不是,表达被隐式转换(第4章)的左操作数的CV-非限定类型。

2

它是有效的操作数不同的操作?

value += exists; 
value *= exists; 

是它是有效的,在bool类型被隐式转换为int。这与您对运算符(+, - )使用混合的intshort操作数的操作类似。

+0

之间进行的。它被底层部件视为一个字节。在这里你可以看到一个C++输入的例子,我使用bools就好像它们是整数一样,但是你也可以看到'movzx eax,BYTE ...'等等。 http://ideone.com/iANO1w – Goodies