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

Why is there no ||= operator in C/C++?

本文关键字:运算符 C++ 为什么      更新时间:2023-10-16

可能的重复:
&=和||=操作员

请参阅标题。这个问题可以扩展到包括所有逻辑+赋值运算符。澄清一下:我不是在说运算符。

另一个例子:&=

谢谢。

示例:

bool结果=false;//今天result=result||my_test1((;//做事result=result||my_test2((;//只是在我的想象中。。。result||=my_test1((;//做事result||=my_test2((;

猜测一下,因为它们只对bools有意义,而bools在派对中迟到了

即使bool在一开始就存在,这些运算符的用途也有限,因为如果没有副作用,它们将与具有布尔操作数的|=&=相同,因此唯一的用途是意外地捕获传入的非bool。

如果提议的运算符也存在短路(并非不合理,因为||&&适用于内置类型(,那么在存在副作用的情况下,您也有额外的理由对其进行说明。

我能想到的允许它们的唯一其他可能原因是,如果它显著简化了语言的解析/编译,但事实可能并非如此,因为它们对非bool类型没有意义。

最终,它们不是用语言表达的,因为没有人足够关心将它们用语言表达,因此我们可以得出结论,这些理由都不足以保证提交提案、将其纳入标准和实施该功能的成本。

因为它们没有意义。x op= y的定义是x = x op y,只是x只评估一次。短路运算符将其每个操作数(如果对其求值(转换为bool,这意味着什么?||=的等价物可能类似于:

if ( !x )
    x = y;

这当然与其它CCD_ 10的解释不同。

没有充分的逻辑理由。。。只是历史对特色的压力。

逻辑运算符通常不能作为单个CPU操作码使用,因此它们不像比特操作码那样便宜或基本。逻辑XOR也不错,可能是^^,然后是^^=

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

因为他们的工作方式大不相同。

查看签名:

T operator+(T,T);
T& T::operator+=(T);
T operator*(T,T);
T& T::operator*=(T);
bool operator&&(T,T);
???

复合运算符是为返回相同类型参数的运算符而存在的,&&||运算符返回布尔值(或者至少应该返回(,因此创建复合版本没有意义,可能只有布尔值除外。