我已经看到,在一些循环和增量。而不是做我++,他们做我+ = 1.为什么这是?为什么人们使用i = i + 1而不是i ++?
回答
并非所有的语言都有++
运算符(python,一个)......可能这些人来自其中一种语言的背景。也有人认为i++
不是很清楚,尤其是因为一些语言对待i++
和++i
的方式不同。
我所知道的每种语言都以不同的方式对待'i ++'和'++ i':表达式的值。换句话说,'x = i ++;'比'x = ++ i'更少地将一个值赋给'x'。这是你想到的吗?我很好奇你对“一些”这个词的用法;你知道有前缀和后缀增量运算符的语言吗,不要区分这个区别吗? –
@Ted Hopp Perl将根据前或后增量返回*值*或*参考*。这可能会导致令人费解的行为。在基本形式中,这不是问题。这在'foo($ x,++ $ x)'的情况下非常令人费解,但是(评估仍然是从左到右)。另外,C/C++有很多UB可变修改(++/- )和两个序列点之间的访问。 – 2011-09-06 00:27:03
在IE浏览器的IE10(也可能<10),我的速度比* +慢了15%* *。因此,我总是喜欢使用i + = 1,只是因为它更快,而且在语义上它几乎是一样的权利。 – Yeti
个人喜好和风格。
防止过度狡猾。至少这就是克罗克福德所说的。
但是,狡猾的代码会很狡猾,没有“++”,干净的代码会变成干净的代码,带有“++”。 – 2011-09-06 00:24:58
i = i + 1
更容易解码英文。 i++
虽然当初学者阅读代码时,完全正确的翻译并不好。程序员可能试图让他们的代码更易于被初学者阅读,或者可能只是不想过度关注语法。没有好理由使用一个在另一个。
有些人发现i = i + 1
或i += 1
比i++
更具描述性。这只是编码风格和可读性的问题。在大多数当前语言中,不同方式之间完全没有性能差异。
++
和--
操作符有一些可读性问题,但主要是当它们与其他操作符一起使用时,它们自己使用时不是真正的问题。例如,像++x+-++y+-z++
这样的表达式是完全有效的,但很难看到它实际上做了什么。由于操作员在某些情况下会导致可读性问题,因此有些人认为应该始终避免这些问题。
然而,这是一个极端。虽然我更喜欢'+ ='到'++',但好的代码是好的代码,坏的代码是坏的代码:'++ x + - ++ y + -z ++'不是好的代码,'++'不在。例如,想象一下,如果使用“i ++”(甚至是“++ i”)的“规则”是“仅在语句上下文中”。这与限制使用“x = i = i + 1”或其他这样的怪物的“规则”没有什么不同。 – 2011-09-06 00:33:06
@pst:当然这是不好的代码,这个例子的要点是要证明操作符可以用来编写不可读的代码。 – Guffa
一般的原因是,有一些不同的表现
var i = 0;
1 == ++i // true
和
var i = 0;
1 == i++; // false
++i
翻译为“增量我,然后评估”,而i++
转化为增量的两个不同版本“评估我,然后增量”
当您将这些表达式编写为i = i + 1;
时,很清楚程序员的意图是什么,并且更容易在代码中找到错误。这是同样的道理的人写“尤达条款”像
if(6 == x){
//. . .
}
,因为如果你不小心做
if(6 = x){
//. . .
}
更容易捕捉到错误
- 1. C++ STL - 为什么要用(W <* I),而不是(W == * I)
- 2. 你为什么要用i =(i + 1)&mask来递增,mask是0b1111?
- 3. 背包算法:为什么我们使用重量[I-1]而不是重量[I]
- 4. “i ++”如何比“i = i + 1”更高效?
- 5. 在JavaScript中,“i = + i”是什么意思?
- 6. 就原子性而言,i ++和i = i + 1之间的区别
- 7. ++ i和i + 1在javascript中的区别是什么
- 8. 为什么对于(int i = 0; i <10; ++ i)和for(int i = 0; i <10; i ++)返回相同?
- 9. 为什么“for(i = 100; i <= 0; --i)”永远循环?
- 10. 为什么printf(“%d%d%d”,++ i,i,i ++)是未定义的行为?
- 11. 为什么g ++不使用-I选项?
- 12. 为什么我的javascript for循环不起作用? for(var i = 1; i <5; i ++;){document.write(“A statement has run”); }
- 13. out [i] = *(a_mat + i)在C中做什么?
- 14. i ++和++ i有什么区别?
- 15. C中i--和i-1有什么区别?
- 16. 将(int i = 0; i <n; i ++;)用作块而不是{int i = 0;我<n; i ++;}在C中有什么意义?
- 17. 如何让“i + = x”作为“i ++”使用?
- 18. 为什么不编码:a [i] = i ++;工作?
- 19. 使用“for(i = 0; elem = array [i]; i ++)”来迭代数组有什么风险?
- 20. I()的功能是什么?
- 21. 什么是const TAB =^I pascal?
- 22. SPARC总成 - 其中i = 0或I = 1
- 23. Javascript:Forloop i ++和(i + 1)之间的区别
- 24. 如何证明西格马(I/2^I)<= 2(i = 1至N)
- 25. 排序数组[i] [0],[i] [1]基于[i]
- 26. “İ”.toLowerCase()!=“i”
- 27. 使用递归给定m(i)= 1 + 1/2 + 1/3 + 1/4 + 1/5 ... + 1/i
- 28. Java的为什么对使用I,J
- 29. SED -i +什么SOLARIS
- 30. 为什么decltype((i))是引用类型,但decltype(i + 0)是int类型?
为什么在标题不同的问题身体中的问题?你打算问哪一个? –
我使用'i + = 1',除了for循环的第三个位置,在这种情况下我使用'i ++'。 – 2011-09-06 00:23:50