&& =和|| =运算符

Arm*_*yan 16 c c# c++ logical-operators

可能的重复:
为什么Java没有条件和条件运算符的复合赋值版本?(&& =,|| =)
为什么"&& ="运算符不存在?

今天在工作中我写了以下LOC(b和b1的真实身份是保密:)

b &&= b1; // meaning b = b && b1; 
Run Code Online (Sandbox Code Playgroud)

我盯着它看了几秒钟,发现没有这样的操作员.只是为了确定,我点击了编译,但失败了.为了确定我已经咨询了标准.

是否存在没有此类运营商的具体原因?我能想到一些:

  1. b &&= b1b = b && b1因为&&的短路评价的可能不等同.
  2. && =很难看
  3. 很少需要&& =

我并不认为拥有这样的运营商是非常有用的,不.我也没有声称上述三个原因中的任何一个或全部都不足以避免创建该运营商.我的问题如下:是否有一个更严重的原因我要监督?

AnT*_*AnT 10

我不知道为什么这个问题和一些答案都提到相应逻辑运算符的短路行为是一个潜在的问题.

在定义&&=||=运算符方面绝对没有与短路相关的问题.它们应该+=与其他类似的运算符统一定义,这意味着它们a &&= b应该相同a = a && b,但a只能在&&=版本中进行一次评估.这意味着b如果a最初为零则根本不进行评估.简单.

因此,他们在语言中不存在的唯一原因是,"仅仅因为".

  • 确切地。Perl 有这些操作符,具有这种行为;虽然我听过许多对 Perl 的批评,但我从未听过有人抱怨 `&&=` 令人困惑。 (2认同)
  • @TED:是的,我真的很喜欢这样的运营商.`&&`和`||`运算符已经与其他二元运算符(例如`+`)有明显不同的行为,我们一直都很好.我没有看到`&& =`和`|| =`与其他形式的赋值相比也有明显不同的行为,即使它涉及RHS的可选评估. (2认同)

Ben*_*igt 9

我之前也想要它们.我怀疑丑陋本身就是决定因素,短路行为是迄今为止我所听到的反对他们的最佳论据.

另一个影响因素是C被设计为靠近金属运行,几乎所有运算符都直接对应于主要架构中的指令.我不认为有直接实现的x86,PPC等指令b &&= b1;