不平等的操作员需要澄清

时间:2014-11-17 18:09:08

标签: c++ operators

我写了这个程序:

#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;
}

我很惊讶它运行并打印了两个字符串。所以我和其他一些二元运算符(例如<=>=等)尝试过同样的事情,但它没有用。 因此,我想了解!==!之间是否存在差异。

我知道有一些运算符,例如+=-=等,其工作方式不同,例如,+==+之间的区别在于添加将在(实际上)命令之前或之后发生。由于这个原因,我怀疑在这些运算符的实现中存在差异,但我不确定是什么。

所以请帮助我理解。

3 个答案:

答案 0 :(得分:3)

表达式a = !b是将值!b赋值给变量a

if语句中对此表达式的评估是a的新值。

由于b设置为false而您将!b分配到a,因此该值为true

答案 1 :(得分:1)

在第一种情况下,!=运算符是单个不等运算符。在第二种情况下,它是赋值运算符=,逻辑非运算符!。因此,在第二种情况下,您要将not b分配给a并返回结果true

答案 2 :(得分:0)

这可能有助于澄清事情:

  • !=:不等于运算符
  • =!:这些实际上是两个运算符:赋值运算符和一元逻辑NOT运算符
  • +=:sum-assignment operator
  • =+:这些实际上是两个运算符:赋值运算符和一元+运算符
  • -=:差异分配运算符
  • =-:这些实际上是两个运算符:赋值运算符和一元运算符

此外,正如您在编辑之前的问题一样:

  • ++=:两个运算符:postfix increment operator和assignment operator
  • =++:两个运算符:赋值运算符和前缀增量运算符

我希望你注意到这种模式。

供参考: