所以这更多的是一个理论问题。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;
(是的,得墨忒尔定律,我知道)。
所以我想知道,是否有任何语言具有一元布尔切换运算符允许我缩写 a = !a
而不用重复 a
的表达式,例如
!=a;
// or
a!!;
让我们假设我们的语言有一个合适的布尔类型(如 C + + 中的 bool
) ,并且 a
也是这种类型(所以没有 C 风格的 int a = TRUE
)。
如果你能找到一个文档化的源代码,我也很想知道 C + + 的设计者是否考虑过在 bool
成为内置类型时添加一个类似的操作符,如果是的话,为什么他们决定不这么做。
(注意: 我知道有些人认为作业不应该使用
=
和 ++
和 +=
不是有用的操作符,而是设计缺陷; 让我们假设我对它们很满意,并关注为什么它们不能扩展到 bools)。