我们为所有逻辑运算符,移位运算符,加法运算符和所有乘法运算符提供等效的赋值运算符。
为什么逻辑运算符被忽略了呢? 这是否有一个好的技术原因,是很难实现呢?
为什么逻辑运算符被忽略了呢? 这是否有一个好的技术原因,是很难实现呢?
逻辑运算符为什么被省略了?这是由于技术上的难度吗?
它们没有被省略。如果你想要的话,你可以使用&=
、|=
或^=
。
bool b1 = false;
bool b2 = true;
b1 |= b2; // means b1 = b1 | b2
||
和 &&
运算符没有复合形式,因为实际上它们有点傻。在什么情况下您想要这样说呢?
b1 ||= b2;
b1 &&= b2;
左侧不改变时,右侧不会被求值。这似乎只有少数人会使用,那为什么放进来呢?isAdmin |= IsGroupAdmin(); isAdmin |= IsCompanyAdmin()
,其中IsGroupAdmin()
和IsCompanyAdmin()
是需要进行数据库查询的耗时方法。在这种情况下,由于性能原因,我不能使用|=
,而必须使用isAdmin=isAdmin ||...
,此时使用||=
将非常有帮助。 - Ole Albers&&=
和 ||=
并不是荒谬的运算符。当 RHS(右手边的值)很昂贵时,它们非常有用。无论是数据库查找、URL 获取还是正则匹配等等,都有大量严肃的用例可以使用这样的运算符。(??=
也属于同一类别,如果为 null,则执行这个昂贵的操作来确定一个值)。我很难认真对待那些认为这是愚蠢的人。 - TanktalusisAdmin = isAdmin || IsGroupAdmin()
a ||= b
有点令人困惑,因为可能会有两个实现版本:a = a || b
或者 a = b || a
。它们的行为不同,因为表达式的右侧有时不会被评估。"最初的回答"a -= b
,没有人会困惑可能会有一个实现 a = b - a
而不是 a = a - b
。 - Hagen von Eitzena = b ?? c;
并且
a ??= b;
a = a ?? b
。这是三元运算符和||=之间的一种折中方案。 - Arsenii