因此,这更多是一个理论问题。C ++和直接基于它的语言(Java,C#,PHP)具有快捷方式运算符,用于将大多数二进制运算符的结果分配给第一个操作数,例如
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
但是当我想切换一个布尔表达式时,我总是发现自己在写类似
a = !a;
当a
一个长表达式像时,这会很烦人。
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(是的,我知道得墨meter耳定律)。
所以我想知道,有没有用一元布尔切换操作员的语言,让我来简化a = !a
而不需要重复表达的a
,例如
!=a;
// or
a!!;
假设我们的语言具有适当的布尔类型(如bool
C ++),a
并且具有该类型(因此没有C样式int a = TRUE
)。
如果您可以找到记录在案的资源,我也很想了解例如C ++设计人员是否在考虑bool
成为内置类型时是否考虑过添加这样的运算符,如果是,为什么他们反对这样做。
(注意:我知道有些人认为不应使用赋值
=
,++
并且+=
它不是有用的运算符,而是设计缺陷;让我们假设我对它们感到满意,并专注于为什么它们不会扩展到布尔值)。
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1
但是,由于某种原因,我觉得它比直观^= true
。
void Flip(bool& Flag) { Flag=!Flag; }
缩短您的长表情。