C++中的=+运算符是什么?

5

我有一个关于一个程序的问题,它包括以下if语句:

if (x =+ 4){
    x += 5;
}

我从未见过这样的情况,这一定不是打错了吧?=+ 真的有用吗?


2
我觉得这是一个打字错误。 - mascoj
1
请注意,一个良好的编译器将会为这段代码发出警告,前提是您使用了相当高的警告级别。 - Christian Hackl
虽然它实际上不是C/C++运算符,但我经常希望它是,这样我就可以写AB=+C而不是C+=AB。 - Krazy Glew
4个回答

20
x =+ 4

意味着

x= (+4)

或者简单地说

x=4
尽管这种构造在语法上是正确的并且可以被编译,但它没有太多意义,很可能是一个拼写错误,原本想要写成 x==4 才有意义,尤其是作为 if 语句的条件。

2
在C语言早期,=++=是相同的,但它已经被淘汰,并且从未出现在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 会调用不同的重载函数。


0

好的,为了完整起见,我发现我的直觉是对的,=+和=-确实只是今天使用的+=和-=操作符的过时形式:

堆栈溢出:在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)。

因此,这与明确表示参数的正负无关。您只需替换现代形式,例如使用+=代替=+。


你可以删除其他已过时的答案,支持这个答案。同时请注意,你引用的是C语言,但这个问题是关于C++的。 - eis
我已经删除了你之前的“答案”,这不是一个论坛,你可以通过*[编辑]*你的答案来改进它们。 - Martijn Pieters

0

抱歉,我的初始答案是由于愚蠢地误读问题而造成的。

正确的答案是,这段代码只是将x赋值为正4,因为它不为零,所以满足if条件,并将其增加5。

在当前状态下,这个程序的一个更简单的形式是:

x = 9;

然而我强烈怀疑这里涉及到了一个打字错误,if条件语句内的语句应根据上下文分别为x == 4x += 4x != 4


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接