什么是"=!" 操作员呢?

Pro*_*aos 4 c++ operators

我不小心打字=!而不是!=那个导致系统中的一个巨大的错误,一段时间未检测到; 我已经修好了,但我很好奇它是做什么的=!.

我有这样的事情

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

    ... 

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

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

per*_*eal 27

这个表达式:

a =! param
Run Code Online (Sandbox Code Playgroud)

分配值!parama.!param是在布尔上下文中评估的否定版本的param.

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


mea*_*gar 9

它不是一个单一的=!运营商.这是=!,分配和否定.

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

a = !param;

if (a) {

}
Run Code Online (Sandbox Code Playgroud)


Jon*_*art 6

=!不是运营商.它是=(赋值)运算符,!(boolean not)运算符.

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

a = !param;
if (a) {
   ...
Run Code Online (Sandbox Code Playgroud)


Dav*_*eas 5

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

if (a = !param)
Run Code Online (Sandbox Code Playgroud)