免费注册 查看新帖 |

Chinaunix

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

[C++] 你娘的C++,你说出“指针”不够用后再提出“引用”好不好! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-27 21:45 |只看该作者 |倒序浏览
本帖最后由 边学CPP边骂CPP 于 2012-09-27 22:08 编辑

不看好C++里的“引用”,多余的东西。
你娘的C++,你说出“指针”不够用后再提出“引用”好不好!

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2012-09-27 22:30 |只看该作者
骂,不能改变什么,引用之所以存在,有其合理性

论坛徽章:
0
3 [报告]
发表于 2012-09-27 22:41 |只看该作者
。。。。lz连引用有什么好处都不知道就乱骂,诶,懒得说了。。。
引用有一个很重要的性质就是固定性(pro叫法应该叫什么?忘了。。),初始化了就不能改了,这对编译器优化来说是很重要的一个设定。
而且书写的时候也很方便,也不会有空指针野指针什么的。。。虽然也会带来一些麻烦。。。

论坛徽章:
0
4 [报告]
发表于 2012-09-27 22:45 |只看该作者
楼主觉得 cout << 怎么样?

如果没有引用,cout怎么弄?重载 <<的时候返回什么,或者,使用 << 、>> 的时候,难道要用指针+<</>> ?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
5 [报告]
发表于 2012-09-27 22:50 |只看该作者
回复 3# justmao945


    很多时候引用可以强制你给一个合法对象。

比如有个很大的类叫Foobar

void foo(Foobar f);

直接传递Foobar是很不划算的,每次调用都得整体拷贝一遍。

如果是C,可以用指针解决这个问题:

void foo(Foobar *f);

问题是,指针可以乱指,可以是空的,那么foo就得检查f到底是不是空,至少得下个断言吧?然而断言只有运行时才有效。

那么,引用就能够保证,既没有额外的开销,也不需要断言:

void foo(Foobar& f);

当然,指针也是必要的。引用必须初始化,因此你必须得传个对象过去。然而如果你的初衷就是获取一个可选的对象,那么引用就不适合了。用指针,可以让用户在不想传递对象的时候,传递一个NULL值,配合默认初始化参数:

void foo(Foobar *f = nullptr);

这样,如果用户想用“默认”的Foobar,就可以直接调用foo(),如果不想用默认的,也可以自己传递一个进去,灵活性比引用强。

都是各解决各的问题的,谈不上谁优谁劣。引用另外一个用处就跟模板有关了,不过不是三言两语说得明白的,这里就表过不提了。

论坛徽章:
0
6 [报告]
发表于 2012-09-27 23:01 |只看该作者
本帖最后由 边学CPP边骂CPP 于 2012-09-27 23:03 编辑

回复 5# starwing83


    引用就是别名。现实生活中可以给谁起个别名或绰号什么的,但在程序里,数据标识应该简练单一为好,C++的引用没见省多少事反而添乱不少!
不信调查一下C++程序员,我想至少有90%的程序员对引用没什么好感,即使是C++熟手。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
7 [报告]
发表于 2012-09-27 23:05 |只看该作者
回复 5# starwing83
拷贝构造函数的参数必须引用
(a=b)=c; 中 a=b 返回的也必须是个引用
opeator[] 等等也是

没有引用就会很奇怪,假设 拷贝构造函数 用指针,就得写成 type a; type b = &a; 这个不单看着奇怪,而且还有歧义

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
8 [报告]
发表于 2012-09-27 23:12 |只看该作者
回复 6# 边学CPP边骂CPP


    我入门C++的时候也不理解,不就是个别名么?而且初始化以后还不让改,这玩意儿有用么?(我看谭浩强《C++程序设计》入门的)。

后来才明白,这货主要是用在函数参数上面,调用的时候一次初始化,当然不让改了……

你先入门了再说吧……

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
9 [报告]
发表于 2012-09-27 23:14 |只看该作者
回复 7# bruceteen


    嗯嗯嗯,这个我倒的确没想到。是的,这恐怕是非常重要的应用了。引用平时都是无意识地用,早就成了下意识反应了,真要说出哪儿必须用一时间还真没反应过来~~

论坛徽章:
0
10 [报告]
发表于 2012-09-27 23:16 |只看该作者
回复 8# starwing83


    不让改,可以定义常量指针或指针常量实现,没必要再创造个“引用”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP