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操作符的五秒钟搜索会显示没有这样的操作符存在,让你觉得可能还有别的事情发生。或者,如果它不会让你想到另一种可能性,我至少希望读到你看了,但不知道一个不存在的操作符如何仍然可以编译。不管怎样,不要把它当成个人的事。。。我否决了这个问题,不是你!研究工作就是一切。