有不少童鞋是大学学习 C 语言的,而其中提到了 i++
和 ++i
的问题,经常有人问我 i++
和 ++i
有什么区别,其实本来没啥必要纠结,但是毕竟天朝嘛,应试教育,有必要写个文章给大家系统地梳理下咯。
一直以来,i++
和 ++i
都是个头疼问题,有什么区别?那么我来记录一下…
先看看微软给的解释:
If | Equivalent Action | Return value |
---|---|---|
++variable | variable += 1 | value of variable after incrementing |
variable++ | variable += 1 | value of variable before incrementing |
可以看到,两者区别不大,简单说 ++i
是先加后用,i++
是先用后加,但是问题出在哪呢?
我们贴一段代码:
|
|
这样结果应该很明了了,不需多解释了,如果是赋值时候,一定要注意,否则后果很严重。
不过,如果是用在 for 循环上,有何差异呢?比如:
|
|
其实运行结果是相同的,这里无需纠结。但谷歌的文档是这么写的(山野哥翻译):
- ++i
和i++
原则:忽略返回值的时候,前缀形式(++i)至少不会比后缀形式效率低,甚至更高,因为后缀形式自加或者自减,需要保存i的原始值作为表达式的值,如果i是迭代器或者其他被标准类型,复制操作的代价可能更大。 所以我们应该尽量使用前缀++形式,特别是使用STL迭代器的情况。
根据谷歌的文档,那我们在循环中还是尽量使用 ++i
。
到此为止,这个 i++
还是个头疼的问题,那么如何彻底解决这个问题?
答案很简单:
不用它。
i++
和 ++i
根据微软的指令都是 i + =1
,那么何必让这种费脑筋的代码继续霸道呢?
我的建议:能分开写就分开写。
如有错误,欢迎指出~