您可以在C 中使用BOOL和INT操作员执行什么操作



我有一个变量, value can 与0到1 有所不同,所以我想使用 bool用于保存此值。

in c 基于这个想法,我可以做什么操作,的类型 bool second的类型 int或float

例如,这个有效吗?

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

如果是,直到 c 将这些值转换为其二进制拨款,并且在这些二进制数字上发现 operations 毫无问题,它是有效的使用操作数

进行操作

是的,这些操作存在,它们在C 标准第13.6节中找到(注意,bool是一种积分类型,也使其成为算术类型):

对于每个三重(LVQR),其中L是算术类型,VQvolatile或空的,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节中定义的:

表格E1 op = E2表达式的行为等效于E1 = E1 op E2,只是仅评估E1一次。在+=和 - =中,E1应具有算术类型,或者是指向可能由CV合并的完全定义的对象类型的指针。在所有其他情况下,E1应具有算术类型。

如果左操作数不是类型,则该表达式被隐式转换为左操作数的CV UNQUALIFIED类型。

使用不同的操作数进行操作是有效的吗?

value += exists;
value *= exists;

是的,它是有效的,bool类型被隐式转换为int。它类似于您使用混合intshort操作数的操作员( , - )的操作。

最新更新