有人请告诉我以下代码之间的区别,这些代码添加了两个数据类型的变量int
.我想知道哪一个更好.
代码A:
sum = sum + value;
代码B:
sum += value;
我们通常更喜欢++
运营商+= 1
.这背后有什么具体原因吗?
我想知道上述代码在约定或效率级别方面的区别.推荐哪一个?
虽然eg 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
的++
和+
/ =
作为+=
对内置类型;
但是对于用户定义的class
s,将调用实际的操作符,并且由那些class
s 的实现者来理解它.在这些情况下++
,+=
可以是最佳的.
cout << sum++;
会在增加之前打印出sum的值.此外,根据您正在做的事情,您可以覆盖运营商+=
和+
.
最小化代码时,可以减少出错的可能性(打字错误或逻辑错误).
通过使用
sum += value;
你可以减少打字时出错的几率
sum = sum + value;
同样的 value++;
value += 1;
可能更容易混淆
value += l;
其中l是变量....
它更多地是关于一致性是对还是错,但减少代码是可维护性的主要奖励.
但是,在复杂的陈述中,必须注意运营商的优先权.
在所示的情况下,除了可读性目的之外,没有特别的理由偏好一种将值递增到另一种的方法.在这种情况下,我认为我更喜欢它sum += value
,sum = sum + value
因为它有点简洁,(我认为)更清晰,但YMMV就此.
至于prefering ++
过+= 1
,(IMO再次)++
增加值作为表达式,如部分时最好sum += array[index++]
-但如果得到了些什么,整个点增加一个到一个值我喜欢index += 1
.但让我们面对现实,其中很大一部分是个人偏好和一时冲动的选择.我总是试着写下我的想法,在那一刻,它是最简单和最清晰的代码 - 但我必须承认,当我回去阅读我自己的一些代码后,我会有更多"我在想什么?"? " 比我想承认的时刻.:-)
因人而异.
祝你好运.