+= C++ 中的运算符
+= Operator in C++
有人请告诉我以下添加两个数据类型int
变量的代码之间的区别。我想知道哪个更好
代码A:
sum = sum + value;
代码B:
sum += value;
我们通常更喜欢 ++
运算符而不是 += 1
。这背后有什么具体原因吗?
我想知道上述代码在约定或效率级别方面的区别。推荐哪一个?
一个叫运算符=
和+
,一个叫运算符+=
。
运算符 ++
和 +=
是首选,因为可读性强——大多数程序员都知道它们的意思。
另一方面,对于内置类型,大多数现代编译器将为 += 1
生成与 ++
和 +
/=
与 +=
相同的代码;
但是对于用户定义的 class
s,将调用实际的运算符,这取决于那些 class
s 的实施者来理解这一切。在这些情况下,++
和 +=
可能是最佳选择。
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;
原始类型(如 int
或 float
)或指针类型没有区别,但如果 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 += A
与 C = 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
有人请告诉我以下添加两个数据类型int
变量的代码之间的区别。我想知道哪个更好
代码A:
sum = sum + value;
代码B:
sum += value;
我们通常更喜欢 ++
运算符而不是 += 1
。这背后有什么具体原因吗?
我想知道上述代码在约定或效率级别方面的区别。推荐哪一个?
一个叫运算符=
和+
,一个叫运算符+=
。
运算符 ++
和 +=
是首选,因为可读性强——大多数程序员都知道它们的意思。
另一方面,对于内置类型,大多数现代编译器将为 += 1
生成与 ++
和 +
/=
与 +=
相同的代码;
但是对于用户定义的 class
s,将调用实际的运算符,这取决于那些 class
s 的实施者来理解这一切。在这些情况下,++
和 +=
可能是最佳选择。
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;
原始类型(如 int
或 float
)或指针类型没有区别,但如果 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 toE1 = (T)((E1) op (E2))
, whereT
is the type ofE1
, except thatE1
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 += A
与 C = 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