需要对不相等的运算符进行澄清
Clarification needed with not-equal operator
我写了这个程序:
#include <iostream>
using namespace std;
void unequalityOperator(){
cout << "Running unequalityOperator..." << endl;
bool a = true, b = false;
if ( a != b ) cout << "!=" << endl;
if ( a =! b ) cout << "=!" << endl;
}
int main()
{
unequalityOperator();
system("pause");
return 0;
}
我很惊讶它运行并打印了两个字符串。所以我用其他一些二进制运算符(如<=
、>=
等)尝试了同样的事情,但没有奏效。因此,我想了解!=
和=!
之间是否存在差异。
我确实知道有一些运算符,如+=
、-=
等,它们的工作方式不同,例如,+=
和 =+
之间的区别在于添加将发生在(分别)实际命令之前或之后。出于这个原因,我怀疑这些运算符的实现与层次结构存在差异,但我不太确定是什么。
所以请帮助我理解。
表达式 a = !b
是变量 a
中值!b
赋值。
if
语句中此表达式的求值是 a
的新值。
由于b
设置为 false
并且您要将!b
分配给 a
,因此此值为 true
。
在第一种情况下,!=
运算符是单个不等式运算符。在第二种情况下,它是具有逻辑而不是运算符!
的赋值运算符=
。因此,在第二种情况下,您将not b
分配给a
并返回其结果true
这可能有助于澄清问题:
-
!=
:不相等运算符 -
=!
:这实际上是两个运算符:赋值运算符和一元逻辑 NOT 运算符 -
+=
:求和赋值运算符 -
=+
:这实际上是两个运算符:赋值运算符和一元+运算符 -
-=
:差分赋值运算符 -
=-
:这实际上是两个运算符:赋值运算符和一元运算符
另外,由于这些在您的问题中被编辑掉:
-
++=
:两个运算符:后缀增量运算符和赋值运算符 -
=++
:两个运算符:赋值运算符和前缀递增运算符
我希望你注意到这个模式。
供参考:
- http://en.cppreference.com/w/cpp/language/operator_precedence
- http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 两个字符串在 c++ 中不相等
- 取消引用运算符不能重载
- 如何以优化的方式同时迭代两个间距不相等的数组
- 在使用累加时,C++中的运算符+不匹配
- 为什么文本运算符不能正常模板化?
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- cout (<<) 重载运算符不打印减去的矩阵
- 映射迭代器与运算符不匹配
- 为什么同时覆盖全局新运算符和特定于类的运算符不是模棱两可的行为?
- 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
- 运算符'<'不能应用于类型 'string' 和 'string' 的操作数
- 为什么我的比较运算符不比较我的点长和双精度值?
- 与"运算符>>"不匹配(操作数类型为"QDataStream"和"QJsonObject")
- 与标准中的"运算符<<"不匹配
- C++自定义删除运算符不能正常工作?
- C ++相同的字符串不相等(实际上是char*)
- C++中[不]相等运算符的求值顺序
- 需要对不相等的运算符进行澄清