为什么C/C++中没有|| =运算符?

kev*_*rpe 10 c c++ operators

可能重复:
&& =和|| =运算符

见标题.可以扩展此问题以包括所有逻辑+赋值运算符.澄清:我不是在谈论| =运算符.

另一个例子:&& =

谢谢.

例:

bool result = false;

// Today
result = result || my_test1();
// Do stuff
result = result || my_test2();

// In my imagination only...
result ||= my_test1();
// Do stuff
result ||= my_test2();

jk.*_*jk. 14

猜测一下,因为他们只对派对迟到的布尔有意义

即使布尔变量在初期一直围绕这些运营商将是有限的使用,因为没有副作用,他们将是相同的|=,并&=与布尔操作数,所以唯一的用途是俘获偶然路过一个非布尔.

如果拟议的运营商也短路(并非不合理的||&&是内置类型),那么你也有副作用的存在为他们额外的理由.

我可以想到允许它们的唯一其他可能原因是,如果它显着简化了解析/编译语言,但是可能不是这种情况,因为它们对非bool类型没有意义.

最终,他们不是在语言,因为没有人照顾,足以让他们在语言,因此,我们可以得出结论,没有这些理由就足够了,以保证提交一份提案,得到它为标准和执行功能的成本.

  • "因为它们与| =和&=相同",否则它们不会相同.bool a = true; a || = somecomplexfuncReturningBoolAfterAnHour() (7认同)
  • 如果答案仅由第一句话组成,那么就会被投票赞成.`&& =`和`&&'一样有意义:`3 && 4`是真的,而`3&4`是假的. (2认同)

Jam*_*nze 8

因为他们没有意义.定义是,除了仅评估一次.这对于一个短路运算符意味着什么,它将每个操作数(如果它评估它们)转换为?相当于可能是这样的:x op= yx = x op yxbool||=

if ( !x )
    x = y;
Run Code Online (Sandbox Code Playgroud)

这肯定不同于其他的解释op=.


Ton*_*roy 5

没有很好的逻辑理由……只是功能的历史压力。

逻辑运算符通常不能用作单 CPU 操作码,因此它们不像按位对应物那样便宜或基本。逻辑异或也不错,也许^^,然后^^=

尽管如此,运算符的激增使得创建具有内置样式语义的插入式用户定义类型变得越来越痛苦,并且在现实世界中几乎没有收益。我仍然希望看到它们 - 这些运算符确实存在于其他一些语言中,例如 Ruby,而且我发现它们既方便又富有表现力。