免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: iw1210
打印 上一主题 下一主题

[C] return n++; n加1在返回后执行?返回了还能执行? [复制链接]

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
11 [报告]
发表于 2013-01-22 15:08 |只看该作者
不知道标准,为啥要这样写?
n是个内部变量的话这样写没啥用吧.
n是个外部变量的话直接修改就行了,还需要return吗?
n是个static内部变量的话这样写有用?

读过标准的各位帮忙解读下啊,这句话是不是ub..

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
12 [报告]
发表于 2013-01-22 16:50 |只看该作者
pandaiam 发表于 2013-01-22 15:08
不知道标准,为啥要这样写?
n是个内部变量的话这样写没啥用吧.
n是个外部变量的话直接修改就行了,还需要re ...

类里的私有变量吧。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
13 [报告]
发表于 2013-01-22 16:57 |只看该作者
lin5161678 发表于 2013-01-22 14:12
回复 6# noword2k

不能 [错了 应该是 不难]不过你错了 返回值不原来的返回值多1

没看清楚,确实错了。

不过一直习惯要加1,就简简单单在一行上用++,明了清晰,没有任何副作用。

要把一个值递增1后,再把原来的值传回去,是特例。

写成
int x = n
n++;
return x;

效率上没问题,会被编译器优化掉,但是太罗嗦了,没return n++;好。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
14 [报告]
发表于 2013-01-22 16:58 |只看该作者
本帖最后由 pandaiam 于 2013-01-22 16:59 编辑

类什么的不清楚..
试了下,static内部变量是有用的, ++就是有效果的了.

也就是 return a++;
这样的语句没问题,只是这样写没啥意思..

@starwing83
@starwing83

论坛徽章:
0
15 [报告]
发表于 2013-01-22 22:09 |只看该作者
return n++

经过g++,gcc,clang编译测试,都返回n,那个++没有用。

论坛徽章:
0
16 [报告]
发表于 2013-01-22 22:19 |只看该作者
这个怎么了

论坛徽章:
0
17 [报告]
发表于 2013-01-22 22:26 |只看该作者
回复 15# hniu


    static变量有用

论坛徽章:
0
18 [报告]
发表于 2013-01-22 22:59 |只看该作者
本帖最后由 timothyqiu 于 2013-01-22 23:02 编辑

return n++;

「对n加一」是在计算取得表达式「n++」的值以后进行的。

类似于:
  1. 将栈上 n 的值赋给 eax   ; temp = n
  2. 将栈上 n 的值加一       ; n = n + 1
  3. (清栈)                ; return temp
复制代码
也就是说,如果是 return 2 + (n++); 的话,和 2 做加法的时候,n 就已经被加一了。

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
19 [报告]
发表于 2013-01-23 10:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
20 [报告]
发表于 2013-01-24 08:48 |只看该作者
这个没有什么问题吧。
如果是局部变量,++的操作可以优化掉的啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP