为什么C/C++中没有||=运算符
Why is there no ||= operator in C/C++?
可能的重复:
&;=和||=操作员
请参阅标题。这个问题可以扩展到包括所有逻辑+赋值运算符。澄清一下:我不是在说运算符。
另一个例子:&;=
谢谢。
示例:
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);
???
复合运算符是为返回相同类型参数的运算符而存在的,&&
和||
运算符返回布尔值(或者至少应该返回(,因此创建复合版本没有意义,可能只有布尔值除外。
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<