我不小心打字=!而不是!=那个导致系统中的一个巨大的错误,一段时间未检测到; 我已经修好了,但我很好奇它是做什么的=!.
我有这样的事情
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)
分配值!param给a.!param是在布尔上下文中评估的否定版本的param.
赋值运算符返回右侧的值,因此,如果为真,if (a = !param)也执行if正文!param.
它不是一个单一的=!运营商.这是=和!,分配和否定.
它相当于if (a = !param),或
a = !param;
if (a) {
}
Run Code Online (Sandbox Code Playgroud)
=!不是运营商.它是=(赋值)运算符,!(boolean not)运算符.
所以你有if (a = !param).赋值返回赋值的值,因此您基本上具有:
a = !param;
if (a) {
...
Run Code Online (Sandbox Code Playgroud)