什么是“=!”操作员呢?

时间:2013-01-09 03:57:34

标签: c++ operators

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

我有类似的东西

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

    ... 

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

有人可以解释上述if语句正在评估的内容吗?

6 个答案:

答案 0 :(得分:27)

这个表达式:

a =! param

将值!param指定给a!param是在布尔上下文中计算的param的否定版本。

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

答案 1 :(得分:9)

这不是一个=!运营商。这是=!,分配和否定。

相当于if (a = !param)

a = !param;

if (a) {

}

答案 2 :(得分:6)

=!不是运营商。它是=(赋值)运算符,!(不是布尔值)运算符。

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

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

答案 3 :(得分:5)

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

if (a = !param)

答案 4 :(得分:2)

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

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

e.g。在伪:

bool a= true;
bool b=!a;

所以b是假的!

答案 5 :(得分:1)

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