我有一个关于一个程序的问题,它包括以下if语句:
if (x =+ 4){
x += 5;
}
我从未见过这样的情况,这一定不是打错了吧?=+ 真的有用吗?
x =+ 4
意味着
x= (+4)
或者简单地说
x=4
尽管这种构造在语法上是正确的并且可以被编译,但它没有太多意义,很可能是一个拼写错误,原本想要写成 x==4
才有意义,尤其是作为 if
语句的条件。=+
和+=
是相同的,但它已经被淘汰,并且从未出现在C++中。
=+a
被理解为= (+a)
一元操作符+
会将参数提升为int
类型(如果它的类型较窄),否则无操作。
=
是常规赋值。
=+
和=
:Foo
, int
}和{Foo
, char
},并且你有一个Foo foo
实例和一个char c
,然后foo = c // calls the overload taking a `char`
并且
foo =+ c // calls the overload taking an `int`
would 会调用不同的重载函数。
好的,为了完整起见,我发现我的直觉是对的,=+和=-确实只是今天使用的+=和-=操作符的过时形式:
堆栈溢出:在C中= +是什么意思? https://www.cs.auckland.ac.nz/references/unix/digital/AQTLTBTE/DOCU_064.HTM(那真是一个老式网页!)
具体地说
https://en.wikipedia.org/wiki/C_(programming_language)#K.26R_C
告诉我们它们被更改了:"形如=op(例如=-)的复合赋值运算符已更改为op=的形式(也就是-=),以消除类似i=-10的结构所创建的语义歧义,该结构已经被解释为i=-10(将i减少10),而不是可能打算的i=-10(让i等于-10)。
因此,这与明确表示参数的正负无关。您只需替换现代形式,例如使用+=代替=+。
抱歉,我的初始答案是由于愚蠢地误读问题而造成的。
正确的答案是,这段代码只是将x赋值为正4,因为它不为零,所以满足if条件,并将其增加5。
在当前状态下,这个程序的一个更简单的形式是:
x = 9;
然而我强烈怀疑这里涉及到了一个打字错误,if条件语句内的语句应根据上下文分别为x == 4
、x += 4
或x != 4
。