【问题标题】:What does the "=!" operator do? [closed]"=!" 是什么意思运营商呢? [关闭]
【发布时间】:2023-03-04 23:15:02
【问题描述】:

我不小心输入了=! 而不是!=,这导致了系统中的一个巨大错误,该错误有一段时间未被发现;我已经修复了它,但我很好奇 =! 做了什么。

我有这样的事情

void foo(int param)
{
    int a = 0;

    ... 

    if (a =! param)
    {
        // never got here even when `a` was not equal to `param`  
    }
    ...
}

有人能解释一下上面的if 语句正在评估什么吗?

【问题讨论】:

  • 这不是被问过的吗(不,我没想到while (x --> 0))?
  • @chris 我没有运气用运算符搜索查询。
  • @ProfessorChaos,我明白这一点。很难找到您知道将依赖于搜索引擎丢弃的符号的问题。
  • @Mehrdad 并非所有内容对每个人都是显而易见的,也并非所有内容都易于搜索。我现在看到它非常微不足道。如果你认为你应该惩罚我,因为我不能像你一样思考和像你一样快,那就这样吧。
  • @ProfessorChaos:抱歉,我觉得有误会。我没有投反对票,因为我认为这很明显(完全同意你的说法),我投反对票是因为对 C operators 的五秒钟搜索会告诉你不存在这样的运营商,让你认为可能还有其他事情发生.或者,如果它不会让您想到其他可能性,我至少希望读到您看过但不知道不存在的运算符如何仍然可以编译。无论如何,不​​要把它当作个人......我对这个问题投了反对票,而不是你!研究工作就是一切。

标签: c++ c operators


【解决方案1】:

这个表达式:

a =! param

将值!param 分配给a!param 是在布尔上下文中求值的 param 的否定版本。

赋值运算符返回右侧的值,因此,如果!param 为真,if (a = !param) 也会执行if 主体。

【讨论】:

    【解决方案2】:

    =! 不是运算符。它是=(赋值)运算符和!(布尔非)运算符。

    所以你有if (a = !param)。赋值返回赋值的值,所以你基本上有:

    a = !param;
    if (a) {
       ...
    

    【讨论】:

      【解决方案3】:

      这不是一个单一的=! 运算符。这是=!,赋值和否定。

      相当于if (a = !param),或者

      a = !param;
      
      if (a) {
      
      }
      

      【讨论】:

        【解决方案4】:

        如果你认为它可以是多个令牌,效果应该很简单:

        if (a = !param)
        

        【讨论】:

          【解决方案5】:

          重要提示:'=!' != '!=' :)

          但是:'=!' == 'assignment of the negation of a value'

          例如在伪:

          bool a= true;
          bool b=!a;
          

          所以 b 是假的!

          【讨论】:

            【解决方案6】:

            =!不是运算符。你可以这样理解。假设有一个语句 a=!b 它是对 a 中操作数 b 的赋值,但这里的扭曲是在将 b 分配给 a 之前,我们通过在操作数 b 前加上 ! 来反转 b 的状态。这基本上是逻辑非运算符。

            【讨论】:

              猜你喜欢
              • 2010-10-24
              • 1970-01-01
              • 2017-07-14
              • 1970-01-01
              • 1970-01-01
              • 2011-11-19
              • 2018-01-11
              • 2013-07-15
              • 2010-12-12
              相关资源
              最近更新 更多