我有一个变量,该值可以从0到1不等,所以我想使用bool类型来保存这个值。
在基于这个想法的C ++中我可以做什么操作,第一个操作数的类型……
使用不同的操作数进行操作是否有效?
value += exists; value *= exists;
是的,它是有效的, bool type隐式转换为 int 。它与你对运算符(+, - )的混合使用类似 int 和 short 操作数。
bool
int
short
是的,存在这些操作,它们可以在C ++标准第13.6节中找到(注意, bool 是一个整数类型,使其成为算术类型):
每三个( L , VQ , R ),哪里 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 );
每三个( L , VQ , R ),哪里 L 是算术类型, VQ 或者是 volatile 或空,和 R 是一种提升的算术类型,存在形式的候选运算符函数
L
VQ
R
volatile
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 应具有算术类型。
E1
op
=
E2
E1 = E1
+=
和
如果左操作数不是类类型,则表达式被隐式转换(第4节)到左操作数的cv-unqualified类型。