C++ 这是什么意思&引用;接线员怎么办?

C++ 这是什么意思&引用;接线员怎么办?,c++,c,operators,C++,C,Operators,我不小心输入了=而不是=在一个系统中造成了一个巨大的错误,但在一段时间内没有被发现;从那以后我就把它修好了,但我很好奇到底是什么可以 我吃过类似的东西 void foo(int param) { int a = 0; ... if (a =! param) { // never got here even when `a` was not equal to `param` } ... } 有人能解释一下上面的语句在计算什

我不小心输入了
=而不是
=在一个系统中造成了一个巨大的错误,但在一段时间内没有被发现;从那以后我就把它修好了,但我很好奇到底是什么可以

我吃过类似的东西

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

    ... 

    if (a =! param)
    {
        // never got here even when `a` was not equal to `param`  
    }
    ...
}
有人能解释一下上面的
语句在计算什么吗?

这个表达式:

a =! param
指定值
!参数
a
<代码>!param
是在布尔上下文中计算的param的否定版本


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

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

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

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

这不是一个单一的
=操作员。它是
=
,赋值和否定

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

a = !param;

if (a) {

}

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

if (a = !param)

重要提示:
“=!”!=“!=”:)

但是:
“=!”='赋值求反“

e、 g.在伪文本中:

bool a= true;
bool b=!a;

所以b是假的

=!他不是接线员。你可以这样理解。假设有一条语句
a=!b
这是a中操作数b的赋值,但这里的转折点是在将b赋值给a之前,我们通过在操作数b前面加前缀来反转b的状态!这基本上是逻辑上的not运算符。

有人问过这个问题吗(没有,我没有想到
,而(x-->0)
)?@chris我没有运气用运算符搜索查询。@Chaos教授,我明白这一点。很难找到你知道的依赖于搜索引擎丢弃的符号的问题。@Mehrdad不是所有的东西都是显而易见的,也不是所有的东西都是容易搜索的。我看现在已经非常琐碎了。如果你认为你应该惩罚我不能像你一样思考,思考速度不如你,那就这样吧。@Chaos教授:对不起,我想这是个误会。我没有投反对票,因为我认为这是显而易见的(完全同意你的说法),我投反对票是因为对
C操作符的五秒钟搜索会显示没有这样的操作符存在,让你觉得可能还有别的事情发生。或者,如果它不会让你想到另一种可能性,我至少希望读到你看了,但不知道一个不存在的操作符如何仍然可以编译。不管怎样,不要把它当成个人的事。。。我否决了这个问题,不是你!研究工作就是一切。