免费注册 查看新帖 |

Chinaunix

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

[C++] 你们的代码会用引用吗? [复制链接]

论坛徽章:
0
111 [报告]
发表于 2008-11-24 16:05 |只看该作者
正确. 同意.

原帖由 yhb04 于 2008-11-18 20:49 发表

一看就知道没好好学过编译,什么叫“但引用有时候却有很大的性能优势 稳定、速度、占用空间小”?
这只是你的幻觉而已。在编译器层面引用跟指针几乎没有区别(除了别名分析引用有点优势),在编译器后端,引 ...

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
112 [报告]
发表于 2008-11-24 16:15 |只看该作者
原帖由 hfgv 于 2008-11-24 13:11 发表
大家仔细想想,C++能活到今天,不都是借了C的福。



C++ 是起家时借了 C 的福,现在好像要分家,比如 C++/CLI 连头文件都可以不要了。

论坛徽章:
0
113 [报告]
发表于 2008-11-24 16:28 |只看该作者

  1. #include <stdio.h>

  2. int &func1(int &i)
  3. {
  4. static int j = i + 8;
  5.    i = 250;
  6.    printf("j = %d\n", j);
  7.    return j;
  8. }

  9. main()
  10. {
  11. int i = 2;
  12. int j;
  13.    printf("i = %d\n", i);
  14.    j = func1(i);
  15.    printf("i = %d, j = %d\n", i, j);
  16. }
复制代码


有人说引用是防止指针对对象的乱修改. 实际引用本身就是指针(实现), 多数时候防止不了.
你看该程序: func1(i)的调用如果不是引用, 参数i就不能被修改, 读程序的人仅仅看main(), 不需要看到func1()--------可能是别人编的, 还没有编好的程序, 就可以知道main()中程序的行为.

而有了引用, i 可能被如同野指针类似的无意修改. 看程序的人仅仅看main()已经不行了.
i = 250就是因为别人犯的错误, 错误修改了不该改的数值.

论坛徽章:
0
114 [报告]
发表于 2008-11-24 17:37 |只看该作者
原帖由 yhb04 于 2008-11-24 13:12 发表

我只不过从我的个人理解评论C++这个语言以及这方面的书而已。
有些人把这些经典教材当成了圣经,把自己变成C++的奴隶,眼中看不得任何对C++的不利评论,真是好笑。

另外,你TMD在我的哪个帖中看到我说引用 ...


唉。。。张嘴就开喷了
别污染污然环境,这种东西也配谈技术

论坛徽章:
0
115 [报告]
发表于 2008-11-24 18:02 |只看该作者
原帖由 wishel 于 2008-11-24 17:37 发表


唉。。。张嘴就开喷了
别污染污然环境,这种东西也配谈技术

你Y才污染环境,说不出个所以然就知道瞎喷。
就你这种SB也跑出来谈技术?技术?我还没看见你的哪个帖子里涉及到技术。
你根本不配跟我谈技术。
思想有多远,你就给我滚多远。

论坛徽章:
0
116 [报告]
发表于 2008-11-24 18:03 |只看该作者
版主快封帖,都成粪坑了

论坛徽章:
0
117 [报告]
发表于 2008-11-24 18:07 |只看该作者

回复 #114 wishel 的帖子

你这种SX,让我想到了两个凡是:
凡是C++经典教材上面说的就是颠扑不破的真理,凡是C++经典教材上的就是正确的。
谁要是敢稍有微词,那还了得,打翻在地,永世不得翻身。
竟然敢说我们伟大,完美的C++有缺陷???

论坛徽章:
0
118 [报告]
发表于 2008-11-24 19:27 |只看该作者
原帖由 hfgv 于 2008-11-24 10:25 发表
C++里有很多垃圾东西都违背了社会分工协作的理念,引用就是其一。

你这个说法很有新意,能不能具体解释一下什么是“社会分工协作”,引用怎么违犯了?在这点上c,是不是使用指针就不会违反?
讨论而已,希望本着事实为例的原则,不要恶语相攻。

论坛徽章:
0
119 [报告]
发表于 2008-11-24 22:08 |只看该作者
看我的113搂.

比如你给别人写一个函数
j = func(int i).
那么,在C中,i 不可能被不小心改变.无论他写的好坏.
如果p = func(int *ip), 那么你也知道, 他有可能改参数所指.你就会注意了.

但是,如果用引用,麻烦来了.j = func(int &i), 你完全不可判断了.

所以,分工协作问题有.


原帖由 sbc19861004 于 2008-11-24 19:27 发表

你这个说法很有新意,能不能具体解释一下什么是“社会分工协作”,引用怎么违犯了?在这点上c,是不是使用指针就不会违反?
讨论而已,希望本着事实为例的原则,不要恶语相攻。

论坛徽章:
0
120 [报告]
发表于 2008-11-25 08:57 |只看该作者
原帖由 思一克 于 2008-11-24 22:08 发表
看我的113搂.

比如你给别人写一个函数
j = func(int i).
那么,在C中,i 不可能被不小心改变.无论他写的好坏.
如果p = func(int *ip), 那么你也知道, 他有可能改参数所指.你就会注意了.

但是, ...

引用本身就表明拿到的是调用它的函数中的变量,而不是该变量的拷贝,在函数里修改了变量的值,这是正确的语义行为呀。
就像你写一个交换函数,本意就是要交换两个变量的值,也就是修改了调用它的函数中的变量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP