Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ +;=C+中的运算符+;_C++_Operators - Fatal编程技术网

C++ +;=C+中的运算符+;

C++ +;=C+中的运算符+;,c++,operators,C++,Operators,有人请告诉我以下添加两个数据类型变量的代码之间的差异int。我想知道哪一个更好 代码A: sum = sum + value; sum += value; 代码B: sum = sum + value; sum += value; 我们通常更喜欢++运算符而不是+=1。这背后还有什么具体原因吗 我想知道上述代码在惯例或效率水平方面的差异。推荐哪一个?一个调用操作符=,另一个调用操作符+ 运算符++和++=是首选的,因为它们具有可读性-大多数程序员都知道它们的含义 另一方面,大多数现代编译

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

代码A:

sum = sum + value;
sum += value;
代码B:

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


我想知道上述代码在惯例或效率水平方面的差异。推荐哪一个?

一个调用操作符
=
,另一个调用操作符
+

运算符
++
++=
是首选的,因为它们具有可读性-大多数程序员都知道它们的含义

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


但是对于用户定义的
s,将调用实际的操作符,这取决于那些
s的实现者来理解所有这些。在这些情况下,
+
+=
可以是最佳的。

基本上是一样的。它既是一个接线员

其中一个调用
=
+
。另一个
+=


所以如果你做了,值+=5。该值上升5+=更好,更有组织。缩短您的代码,使其更好、更专业。

当您最小化代码时,您就减少了出错(印刷错误或逻辑错误)的机会

利用

sum += value;
你减少了打字时出错的机会——即使是很小的一点

sum = sum + value;
value++相同

value += 1;
可能更容易与

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

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


但是,在复杂语句中,必须注意运算符的优先性。

虽然例如
someVar++
运算符的最终结果与
someVar+=1
相同,但也有其他因素在起作用

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

foo = bar++;
它实际上等于(但不等于)

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


至于两者的区别

foo += 1;

基本类型(如
int
float
)或指针类型没有什么不同,但如果
foo
是一个具有运算符重载的对象,则会有很大的不同。然后

foo += 1;
等于

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

等于

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

语义上有很大的区别。实际上也是如此,特别是如果任何运算符重载函数都有副作用,或者复制构造函数或析构函数有一些副作用(或者您忘记了)。代码A和代码B也有同样的作用。使用代码B的优点是打字更快,更容易阅读


至于在
+=1
上使用
++
运算符,同样也是为了可读性。虽然
foo++
++foo
之间有区别。前者先读取,然后递增,而后者先递增,然后从中读取。

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

就喜欢
++
而不是
++=1
,(我再说一遍)
++
在作为表达式的一部分增加值时更可取,例如
sum+=array[index++]
-但是如果所做的全部工作是将一个值添加到一个值中,我更喜欢
index++=1
。但让我们面对现实吧,这在很大程度上是个人偏好和一时冲动的选择。我总是试着写我认为最简单、最清晰的代码,但我必须承认,当我回过头来阅读我自己的一些代码时,我有比我想承认的更多的“我当时在想什么”?!?”时刻。:-)

YMMV


祝你好运。

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

形式为
E1 op=E2
的复合赋值表达式是等效的 to
E1=(T)((E1)op(E2))
,其中
T
E1
的类型,除了
E1
仅评估一次

引自

[…]以下代码是正确的:

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:


但在我的情况下,两者最终都是一样的。你会推荐哪种方法?@ItbanSaeed你原来的帖子没有提到什么类型的
sum
value
。这就是为什么对于建议的内容没有具体的答案。如果它们是用户定义的类型,并且
+
+=
被重载,那么您可以通过查看这些重载的源代码并执行以下操作来决定什么是有效的