请有人告诉我以下两个代码在将数据类型为int
的两个变量相加时的区别。我想知道哪个更好。
代码A:
sum = sum + value;
代码 B:
sum += value;
通常我们更喜欢使用++
运算符而不是+= 1
。这背后有什么特定的原因吗?
我想知道上述代码在传统或效率水平方面的区别。哪个更受推荐?
someVar++
运算符的最终结果与someVar += 1
相同,但还有其他因素在起作用。foo = bar++;
这实际上是等价的(但不相等)
temp = bar;
bar += 1;
foo = temp;
关于前缀和后缀的递增或递减运算符,它们有不同的运算符优先级,这将影响使用这些运算符进行指针算术等操作。
foo += 1;
并且
foo = foo + 1;
对于原始类型(如int
或float
)或指针类型,没有区别,但如果foo
是一个具有运算符重载的对象,则存在非常大的差异。然后
foo += 1;
等于
foo.operator+=(1);
当
foo = foo + 1;
等于
temp = foo.operator+(1);
foo.operator=(temp);
从语义上来说,这是非常大的区别。实际上也是如此,特别是如果任何一个操作符重载函数具有副作用,或者复制构造函数或析构函数具有一些副作用(或者您忘记了三五零规则)。
一般称=
和+
为赋值运算符和加法运算符;称+=
为自加运算符。
由于易读性,程序员更倾向于使用++
和+=
。
然而,对于内置数据类型,大多数现代编译器将为+= 1
生成与++
或+
/=
相同的代码;
但对于用户自定义类,实际上会调用相应的运算符,这就需要类的实现者来理清整个过程。在这些情况下,使用++
和+=
可能更优。
cout << sum++;
会在自增之前输出sum的值。此外,根据您所做的操作,您可以重载运算符+=
和+
。
标签,您可以将代码与普通文本区分开来。sum += value;
通过使用输入法,您可以稍微降低打字时出错的几率
sum = sum + value;
value++;
相同。value += 1;
可能会更容易混淆
value += l;
其中l是一个变量....
这更多的是关于一致性,而不是对错,但减少代码可以大大提高可维护性。
然而,在复杂语句中必须注意运算符的优先级。
sum += value
而不是sum = sum + value
,因为它更加简洁和清晰(我认为),但这取决于个人喜好。++
还是+= 1
,(我再次强调)在将增量作为表达式的一部分时,++
更可取,例如sum += array[index++]
- 但如果整个操作的目的就是将一个值加一,我会更喜欢index += 1
。但是让我们面对现实,很多时候这都是个人偏好和即兴选择。我总是试图写出我认为当时最简单和最清晰的代码 - 但我必须承认,当我回过头去看我的一些代码时,我有更多的“我当时在想什么?!”的时刻,比我愿意承认的要多。sum = sum + value
看起来更易读,而不是 sum += value
。那么我为什么要使用 sum += value
呢?此外,您能否将其与效率或标准惯例联系起来? 我同意应该写下自己的想法,但假设我们必须证明代码中的每个语句,那么你如何证明 sum += value
比 sum = sum + value
更易读(在我看来)? - Itban Saeed+=
运算符比使用operator +
更高效。原因是+
会创建一个全新的对象,而+=
则可以直接在现有对象上进行操作。但需要注意的是,这只适用于良好编写的类型。 - PaulMcKenziesum += value
更容易阅读,因为需要(精神上)解析的标记更少 - 但是,这又是个人偏好和习惯的问题。如果需要理由,我的“理由”是对我来说,它比 sum = sum + value
更容易和更快地理解 - 但是,我已经写了30多年的C及其衍生语言(我的时间去哪里了? :-)),所以也许只是我的习惯几乎萎缩了。再次强调-你的情况可能会有所不同。 - Bob Jarvis - Слава Україні代码A和B执行的是相同的操作。使用代码B的优点在于打字更快,阅读更容易。
至于使用++
运算符还是+= 1
,同样是为了可读性。虽然foo++
和++foo
之间存在差异。前者先被读取然后再增加,而后者则是先增加再读取。
A
和 B
是否执行相同的操作。 - PaulMcKenzie形如
E1 op= E2
的复合赋值表达式等效于E1 = (T)((E1) op (E2))
,其中T
是E1
的类型,但是E1
只被计算一次。
以下是引自Java +=、-=、*=、/= 复合赋值运算符的一个例子:
[...] 下面的代码是正确的:
short x = 3;
x += 4.6;
这将导致 x 的值为 7,因为它等同于:
short x = 3;
x = (short)(x + 4.6);
x++
将在每次运行时将 x
的值增加一 (1)。
+=
将右操作数添加到左操作数并将结果存储在左操作数中。类似以下内容:C += A
与 C = C + A
相同。
++
和 +=
之间的区别在于前者只能增加一 (1),而 +=
可以用于在一行中增加多个。
e.g:
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
这其实是同样的东西。它们都是运算符。
其中一个调用=
和+
。另一个是+=
。
所以如果你输入 value +=5,value 就会增加 5。+= 更好、更有组织性。它可以缩短代码,更为专业。
sum
和value
的类型。因此,从语义上讲它意味着“相加”,但是+
和+=
的重载可能会执行某些完全低效或非正统的操作。 - PaulMcKenzie在功能上,这两者没有区别。A += B 实际上意味着 A = A + B。第一个只是写第二个的更短的方式。
A
和 B
是什么以及这些运算符是否被重载。 - PaulMcKenzie
sum
和value
是哪种类型。因此,没有具体的答案可以推荐。如果它们是用户定义的类型,并且已经重载了+
或+=
,那么你需要查看这些重载的源代码并进行测试来决定哪种方法是更高效的。但是,请注意,通过执行+1
不能确定这些变量是否为int
类型。有人可能会设计一个big_int
类,在重载的+
或+=
中使用一个int
作为参数。 - PaulMcKenzie