+= C++ 中的运算符

+= Operator in C++

有人请告诉我以下添加两个数据类型int变量的代码之间的区别。我想知道哪个更好

代码A:

sum = sum + value;

代码B:

sum += value;

我们通常更喜欢 ++ 运算符而不是 += 1。这背后有什么具体原因吗?

我想知道上述代码在约定或效率级别方面的区别。推荐哪一个?

一个叫运算符=+,一个叫运算符+=

运算符 +++= 是首选,因为可读性强——大多数程序员都知道它们的意思。

另一方面,对于内置类型,大多数现代编译器将为 += 1 生成与 +++/=+= 相同的代码;

但是对于用户定义的 classs,将调用实际的运算符,这取决于那些 classs 的实施者来理解这一切。在这些情况下,+++= 可能是最佳选择。

cout << sum++; 会打印出 sum 递增前的值。此外,根据您的操作,您可以覆盖运算符 +=+.

基本上是一样的。它既是运算符。

其中一个调用 =+。还有另一个+=..

所以如果你做了值+=5。价值上升 5。+= 更好,更有条理。并缩短您的代码,更好更专业。

当你最小化代码时,你就减少了错误的可能性(印刷错误或逻辑错误)。

通过使用

sum += value;

你减少了打字时出现错误的可能性 - 非常轻微 -

sum = sum + value;

value++;

value += 1;

可能更容易与

混淆

value += l; 其中 l 是一个变量....

它更多的是关于一致性,它是关于对或错的,但减少代码是可维护性的主要好处。

然而,在复杂的语句中,必须注意运算符的优先级。

虽然最终结果是someVar++ 运算符与 someVar += 1 相同,还有其他内容。

让我们做一个简单的陈述,比如

foo = bar++;

实际上相当于(但不等于)

temp = bar;
bar += 1;
foo = temp;

至于前缀和后缀递增或递减运算符,它们具有不同的operator precedence,这将影响使用这些运算符的指针算法


至于两者的区别

foo += 1;

foo = foo + 1;

原始类型(如 intfloat)或指针类型没有区别,但如果 foo 是具有运算符重载的对象,则有很大区别。那么

foo += 1;

等于

foo.operator+=(1);

foo = foo + 1;

等于

temp = foo.operator+(1);
foo.operator=(temp);

语义上有很大的不同。实际上也是如此,特别是如果任何运算符重载函数有副作用,或者复制构造函数或析构函数有一些副作用(或者你忘记了the rules of three, five or zero)。

代码A和B做同样的事情。使用代码 B 的优点是输入速度更快且更易于阅读。

至于在 += 1 上使用 ++ 运算符,同样是为了可读性。虽然foo++++foo是有区别的。前者先读后自增,后者先自增后读

在所示的情况下,没有特别的理由更喜欢一种增加值的方法而不是另一种方法,除非可能出于可读性目的。在这种情况下,我认为我更喜欢 sum += value 而不是 sum = sum + value,因为它更简洁(我认为)更清晰,但 YMMV 就此而言。

++ 而不是 += 1 而言,(再次是 IMO)++ 在将值作为表达式的一部分递增时更可取,例如sum += array[index++] - 但如果所做的全部工作是将一个值加一,我更喜欢 index += 1。但让我们面对现实吧,其中很大一部分是个人喜好和一时冲动的选择。我总是试着写下我认为在那一刻可能是最简单和最清晰的代码——但我必须承认,当我稍后回去阅读我自己的一些代码时,我有更多 "What was I thinkin'?!?" 的时间比我'我愿意承认。 :-)

YMMV.

祝你好运。

两者在功能上没有区别。 A += B 实际上意味着 A = A + B。第一个只是第二个的较短写法。

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

引用自Java's +=, -=, *=, /= compound assignment operators

的例子

[...]下面的代码是正确的:

short x = 3;
x += 4.6;

并导致 x 的值为 7,因为它等同于:

short x = 3;
x = (short)(x + 4.6);

到此为止它们都是一样的,都可以用来增加变量(存储在其中)的值。

x++ 将每 运行 次将 x 的值递增一 (1)。

+= 将右操作数与左操作数相加并将结果存储在左操作数中。 像下面这样的东西: C += AC = C + A

相同

+++=的区别在于第一个只能增加一(1),而+=可以用来增加一个以上的一个行。

例如:

x += 1; // will increment by 1 every run time
x += 4; // will increment by 4 every run time
x += 10; // will increment by 10 every run time