当前位置:  开发笔记 > 编程语言 > 正文

+ = C++中的运算符

如何解决《+=C++中的运算符》经验,为你挑选了5个好方法。

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

代码A:

sum = sum + value;

代码B:

sum += value;

我们通常更喜欢++运营商+= 1.这背后有什么具体原因吗?

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



1> Some program..:

虽然eg someVar++运算符的最终结果与someVar += 1播放其他内容的结果相同.

让我们简单地说一下

foo = bar++;

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

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

对于前缀和后缀增量或减量运算符,它们具有不同的运算符优先级,这将影响使用这些运算符的指针运算.


至于之间的区别

foo += 1;

foo = foo + 1;

原始类型(如intfloat)或指针类型没有区别,但如果foo是具有运算符重载的对象,则会有很大的不同.然后

foo += 1;

等于

foo.operator+=(1);

foo = foo + 1;

等于

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

语义上有很大的不同.实际上也是如此,特别是如果任何运算符重载函数有副作用,或者复制构造函数或析构函数有一些副作用(或者你忘记了三,五或零的规则).



2> Paul Evans..:

一个调用运算符=,+后一个调用运算符+=.

运营商+++=是首选,因为可读性的-大多数程序员知道他们的意思.

在另一方面最现代的编译器将生成相同的代码+= 1+++/ =作为+=对内置类型;

但是对于用户定义的classs,将调用实际的操作符,并且由那些classs 的实现者来理解它.在这些情况下++,+=可以是最佳的.


@ItbanSaeed您的原始帖子没有提到`sum`和`value`是什么类型.这就是为什么对于推荐的内容没有具体答案的原因.如果它们是用户定义的类型并且"+"或"+ ="被重载,那么由您来决定通过查看这些重载的源并进行测试来确定什么是有效的.不,做一个"+ 1"并不能确定它们是否是"整数".有人可以很容易地想出一个`big_int`类,它在重载的`+'或`+ =`中将`int`作为参数.

3> Pétur Ingi E..:

cout << sum++;会在增加之前打印出sum的值.此外,根据您正在做的事情,您可以覆盖运营商+=+.



4> Grantly..:

最小化代码时,可以减少出错的可能性(打字错误或逻辑错误).

通过使用

sum += value;

你可以减少打字时出错的几率

sum = sum + value;

同样的 value++;

value += 1;

可能更容易混淆

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

它更多地是关于一致性是对还是错,但减少代码是可维护性的主要奖励.

但是,在复杂的陈述中,必须注意运营商的优先权.



5> Bob Jarvis -..:

在所示的情况下,除了可读性目的之外,没有特别的理由偏好一种将值递增到另一种的方法.在这种情况下,我认为我更喜欢它sum += value,sum = sum + value因为它有点简洁,(我认为)更清晰,但YMMV就此.

至于prefering +++= 1,(IMO再次)++增加值作为表达式,如部分时最好sum += array[index++]-但如果得到了些什么,整个点增加一个到一个值我喜欢index += 1.但让我们面对现实,其中很大一部分是个人偏好和一时冲动的选择.我总是试着写下我的想法,在那一刻,它是最简单和最清晰的代码 - 但我必须承认,当我回去阅读我自己的一些代码后,我会有更多"我在想什么?"? " 比我想承认的时刻.:-)

因人而异.

祝你好运.


@ItbanSaeed运算符`+ =`用于*编写良好的*用户定义类型比使用`operator +`更有效.原因是`+`创建了一个全新的对象,而`+ =`与现有的对象一起工作.但请注意 - *写得好*.
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有