免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3099 | 回复: 8
打印 上一主题 下一主题

[C++] 函数参数双&修饰参数类型是什么意思? [复制链接]

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-19 12:26 |只看该作者 |倒序浏览
比如void f(int&&),这是什么意思?是C++11的新特性还是VS自己扩展的?我在VS2012的vector代码里面看到的。
我搜了下,说是用于什么右值引用,是不是就是这么个用法:
这样写f(5)就可以过编译,用于替代这种写法,“void f(int&),然后f((int&)(const int&)5)”。
以及class A和void f(A&&),f(A())这样就可以了,而不需要f((A&)(const A&)A())。
不过这个到底是VS自己搞出来的,还是C++11啊?

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
2 [报告]
发表于 2014-02-19 16:13 |只看该作者
这么久都没人回,我猜测应该不是11标准了,估计是VS自己扩展的……

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
3 [报告]
发表于 2014-02-19 16:21 |只看该作者
回复 1# w_anthony


    &&的确是C++11标准的一部分,称为rvalue reference,主要是为了解决不必要的临时对象开销以及深度copy,配合move使用可以使用的STL的容器更加高效。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
4 [报告]
发表于 2014-02-19 16:26 |只看该作者
回复 3# myworkstation


    谢谢,不过它出现的意义,是否是解决我上面提到的那两种情况?
有没有其它用法?是否都用来修饰函数参数类型的?有没有用来修饰返回值之类的其它用法?
对这个比较陌生,C++11现在是用不到,不过既然遇到了就想了解一下。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
5 [报告]
发表于 2014-02-19 16:30 |只看该作者
我目前的感觉是“在函数内使用&&声明的对象,与引用的使用方法没有什么不同”,可能汇编代码的原理也没有什么不同,只是在使用这个函数时,这个函数可以更友好的接受右值参数,比如f(5)和f(A())这样的,这是引用所做不到的,是否仅此而已?

论坛徽章:
2
酉鸡
日期:2014-01-09 13:24:252015年亚洲杯之阿曼
日期:2015-02-13 00:43:51
6 [报告]
发表于 2014-02-19 19:34 |只看该作者
w_anthony 发表于 2014-02-19 16:30
我目前的感觉是“在函数内使用&&声明的对象,与引用的使用方法没有什么不同”,可能汇编代码的原理也没有什 ...

它出现的目的已经有人说了,是为了解决不必要的临时对象开销以及深度copy

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
7 [报告]
发表于 2014-02-20 07:48 |只看该作者
回复 5# w_anthony


    好像仅此而已
f(“aaa")要写成 f(std::string("aaa"))
的确很难看。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
8 [报告]
发表于 2014-02-20 09:21 |只看该作者
回复 7# folklore


    谢谢,感觉更像个语法糖,就算没有它,如果要“解决不必要的临时对象开销以及深度copy”,那也可以写成(A&)(const A&)也就是难看一点,效率上面没有差别。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
9 [报告]
发表于 2014-02-20 12:07 |只看该作者
回复 8# w_anthony


    你说的问题其实只看到了rvalue,lvalue,而c++ 11中又作了细分:lvalue,xvalue(expiring value),prvalue(pure rvalue),glvalue(general lvalue),rvalue。右值引用解决的是xvalue的问题,而常引用解决的是prvalue的问题,它们是有区别的。最典型和直接的能说明问题的应用场景我觉得应该是c++ 11的新stl容器的emplace系列的方法。建议你去看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP