有人请告诉我以下代码之间的区别,这些代码添加了两个数据类型的变量int.我想知道哪一个更好.
代码A:
sum = sum + value;
Run Code Online (Sandbox Code Playgroud)
代码B:
sum += value;
Run Code Online (Sandbox Code Playgroud)
我们通常更喜欢++运营商+= 1.这背后有什么具体原因吗?
我想知道上述代码在约定或效率级别方面的区别.推荐哪一个?
Som*_*ude 16
虽然eg someVar++运算符的最终结果与someVar += 1播放其他内容的结果相同.
让我们简单地说一下
foo = bar++;
Run Code Online (Sandbox Code Playgroud)
它实际上相当于(但不相等)
temp = bar;
bar += 1;
foo = temp;
Run Code Online (Sandbox Code Playgroud)
对于前缀和后缀增量或减量运算符,它们具有不同的运算符优先级,这将影响使用这些运算符的指针运算.
至于之间的区别
foo += 1;
Run Code Online (Sandbox Code Playgroud)
和
foo = foo + 1;
Run Code Online (Sandbox Code Playgroud)
原始类型(如int或float)或指针类型没有区别,但如果foo是具有运算符重载的对象,则会有很大的不同.然后
foo += 1;
Run Code Online (Sandbox Code Playgroud)
等于
foo.operator+=(1);
Run Code Online (Sandbox Code Playgroud)
而
foo = foo + 1;
Run Code Online (Sandbox Code Playgroud)
等于
temp = foo.operator+(1);
foo.operator=(temp);
Run Code Online (Sandbox Code Playgroud)
语义上有很大的不同.实际上也是如此,特别是如果任何运算符重载函数有副作用,或者复制构造函数或析构函数有一些副作用(或者你忘记了三,五或零的规则).
Pau*_*ans 14
一个调用运算符=,+后一个调用运算符+=.
运营商++和+=是首选,因为可读性的-大多数程序员知道他们的意思.
在另一方面最现代的编译器将生成相同的代码+= 1的++和+/ =作为+=对内置类型;
但是对于用户定义的classs,将调用实际的操作符,并且由那些classs 的实现者来理解它.在这些情况下++,+=可以是最佳的.
最小化代码时,可以减少出错的可能性(打字错误或逻辑错误).
通过使用
sum += value;
Run Code Online (Sandbox Code Playgroud)
你可以减少打字时出错的几率
sum = sum + value;
Run Code Online (Sandbox Code Playgroud)
同样的 value++;
value += 1;
Run Code Online (Sandbox Code Playgroud)
可能更容易混淆
value += l; 其中l是变量....
它更多地是关于一致性是对还是错,但减少代码是可维护性的主要奖励.
但是,在复杂的陈述中,必须注意运营商的优先权.
在所示的情况下,除了可读性目的之外,没有特别的理由偏好一种将值递增到另一种的方法.在这种情况下,我认为我更喜欢它sum += value,sum = sum + value因为它有点简洁,(我认为)更清晰,但YMMV就此.
至于prefering ++过+= 1,(IMO再次)++增加值作为表达式,如部分时最好sum += array[index++]-但如果得到了些什么,整个点增加一个到一个值我喜欢index += 1.但让我们面对现实,其中很大一部分是个人偏好和一时冲动的选择.我总是试着写下我的想法,在那一刻,它是最简单和最清晰的代码 - 但我必须承认,当我回去阅读我自己的一些代码后,我会有更多"我在想什么?"? " 比我想承认的时刻.:-)
因人而异.
祝你好运.
| 归档时间: |
|
| 查看次数: |
26986 次 |
| 最近记录: |