惭愧,至今不太了解 ++i 和 i++ 的差别

2015-07-02 18:22:18 +08:00
 northisland

只记得学校教过,这俩一个是lvalue,一个是rvalue。

其他的区别就不知道了,求人讲解

3250 次点击
所在节点    问与答
21 条回复
kingwrcy
2015-07-02 18:25:23 +08:00
+在前,先加后用
+在后,先用后加
Zhang
2015-07-02 18:26:43 +08:00
++i的值等于i+1,i++的值等于i
seki
2015-07-02 18:29:03 +08:00
看到这两个就感到了一种熟悉的味道,那味道名叫谭浩强
别伸手了,上网搜“++i 和 i++ 的差别”有真相

个人觉得代码中只用一种比较好,避免脑子抽风
66beta
2015-07-02 18:56:23 +08:00
一楼言简意赅
zhizhuo
2015-07-02 18:59:51 +08:00
file1:
int main()
{
int i=0;
++i;
return i;
}

file2:
int main()
{
int i=0;
i++;
return i;
}

使用clang 编译后两者diff 为空。

所以,区别就在与一个左值一个右值,
对于编译器而且如果开了优化,所谓的多算了一次这种扯淡的效率问题是不存在的。
FrankFang128
2015-07-02 19:08:08 +08:00
偷懒带来的悲剧
ChiangDi
2015-07-02 19:10:17 +08:00
历史遗留问题。
frankzeng
2015-07-02 19:11:03 +08:00
用i+1这种形式吧,别钻牛角尖了
zonghua
2015-07-02 19:19:12 +08:00
@frankzeng 与i=i+1 这样的问题不懂还可以理解
lk09364
2015-07-02 19:38:20 +08:00
@zhizhuo
javascript:

```
(function(){
 var i = 0;
 return i++; // return 0
})();


(function(){
 var i = 0;
 return ++i; // return 1
})();

```
dreammes
2015-07-02 20:24:29 +08:00
我都忘了 有什么区别了,。。。
SaulLawliet
2015-07-02 20:31:40 +08:00
a = i++; // a = i, i += 1
b = ++i; // i += 1, b = i
uleh
2015-07-02 20:54:38 +08:00
只要你保证这个语句单独执行,就希望^_^
uleh
2015-07-02 20:55:04 +08:00
就“一样”…
yongzhy
2015-07-02 21:15:45 +08:00
一楼正解,只有用于赋值和比较的时候才能体现区别,5楼的用法没有赋值或者比较,没有区别
yanguango
2015-07-02 22:19:28 +08:00
功能上的区别是如果++表达式作为赋值语句的右值,i++是返回加之前的值,++i是返回加之后的值,这个在一些循环里善加利用能让代码更漂亮。如果++作为单独的语句,只是用来累加,那功能上没区别,一点小区别是i++ 会创建一个临时的值,用来返回, 所以这时++i性能略好,具体可参见 C++ Primer
ryd994
2015-07-02 23:35:19 +08:00
说实话,我从来不用
b=a++或者b=++a

++a;
b=a;
a++;
ryd994
2015-07-02 23:36:26 +08:00
@yanguango 然而编译器会优化掉不用的部分,参见5楼
lichao
2015-07-03 05:42:57 +08:00
楼主,这种问题,你有这发帖时间,自己完全可以去找到答案了
greatghoul
2015-07-03 06:00:20 +08:00
楼主,这种问题,你有这发帖时间,自己完全可以去找到答案了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/202859

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX