免费注册 查看新帖 |

Chinaunix

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

[C++] C++的引用的传递和返回兼批判 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2007-05-17 18:14 |只看该作者
我是一口气看完的
因为很过瘾,一直在想另一方会怎么回答
所以会有有点儿囫囵吞

我在下面这个地方起了一个反复

原帖由 ypxing 于 2007-5-16 10:41 发表

个人认为引用的意义还是很明确的

一个程序员在不了解一个函数时对它进行调用,
如果不想让参数改变,调用前就应该对参数进行保存.

不用引用,只用指针的话,比如void f(int *p)
你只知道p不变,而根本不知道*p会不会变
同样会造成你所说的一些问题
int i;
f(&i); /*调用后你也不知道i变不变,要想i不变,只能事先保存它,因为f不是你定义的,你不能改变它,
           只能使用它*/

[ 本帖最后由 ypxing 于 2007-5-16 10:50 编辑 ]


这里给我的第一印象是ypxing占了上风,
心想版主会怎么回答,
这一想才发现ypxing的例子好像并不太能证明什么,更像一个陷阱,呵呵
ypxing前后的话都挺还挺中肯的,就是跟这个例子有关让我不太舒服,
而且好像就是从这帖后开始有点儿较针儿,呵呵


由于没有心理准备,这句话让我乐了半天
原帖由 emacsnw 于 2007-5-16 11:47 发表
这样说的话,加const就一定有用吗?函数实现的时候还可以const_cast后继续修改参数。

原帖由 飞灰橙 于 2007-5-16 11:10 发表
不了解一个函数,居然还敢调用它!!!真佩服楼上的两位!!
既然调用一个函数,必然知道它的函数原型,必然知道该函数的引用参数有没有加const

如果是读代码的话,
要是每个函数都要看原形,那也太痛苦了
我希望尽量少看,不想增加这种负担

原帖由 DraculaW 于 2007-5-16 16:15 发表
java不就是全都是引用么

从语法上讲看到java应该会想到c
尽管人们一直在说那是对象传引用
但是事后我感觉这么说只能增加我学习过成中的混乱
直接说传值的会让我更舒服

只是旁观者的感受,仅供参考
有错误请指正,
有脾气请跟我一起深呼吸
大口吸气,吸----------------------------------------------------------------------------------
大品呼气,呼----------------------------------------------------------------------------------

论坛徽章:
0
72 [报告]
发表于 2007-05-18 09:08 |只看该作者
java也有传值,不全是引用(参见unixpm贴)。

FORTRAN, 编译BASIC应该没有传值,全是引用。

论坛徽章:
0
73 [报告]
发表于 2007-05-18 10:35 |只看该作者
java是通过引用(更象C里的指针)处理对象(object)的,
形参和实参之间并不存在引用

java里的函数参数一定是传值,不是引用
不管是基本数据类型还是对象
在对象的情况下是对"对象的引用"的传值,
在子函数里怎么改这个引用都不会影响实参,
但参数本身是引用,所以对象有可能会变,并且函数外面是可见的(这个就更象C里的指针了)

这两个是不一样的:以引用方式传递一个参数(传引用,这种方式在java里没有)和传递一个内容为引用的参数.

论坛徽章:
0
74 [报告]
发表于 2007-05-18 10:46 |只看该作者
TO pakix,

JAVA的我不明白,但你说的和unixpm不一样。

“在对象的情况下是对"对象的引用"的传值,”, 如果一个OBJ非常大,如何传递?

论坛徽章:
0
75 [报告]
发表于 2007-05-18 10:57 |只看该作者
引用(或者指针)不会传递对象,跟对象的大小没啥关系吧

只要是对象,在java中都是经传值的方式传进去这个对象的引用
尽量别把java中的引用这个词和C++的引用联系起来,和C中的指针联系起来,我当初就是这么混乱的

论坛徽章:
0
76 [报告]
发表于 2007-05-18 10:59 |只看该作者
”只要是对象,在java中都是经传值的方式传进去这个对象的引用“

含义就是传对象的指针?

论坛徽章:
0
77 [报告]
发表于 2007-05-18 11:01 |只看该作者
差不多吧,我是这么理解的

论坛徽章:
0
78 [报告]
发表于 2007-05-18 11:12 |只看该作者
原帖由 pakix 于 2007-5-17 18:14 发表
从语法上讲看到java应该会想到c
尽管人们一直在说那是对象传引用
但是事后我感觉这么说只能增加我学习过成中的混乱
直接说传值的会让我更舒服


唉太面了,语无伦次

我想表达的是:

Object o;
o被称为对对象的引用
但是事后我感觉这么说只能增加我学习过成中的混乱
直接说指针会让我更舒服

c++的引用的三个限制条件在java里都不存在,这里也让我感觉它更象指针

论坛徽章:
0
79 [报告]
发表于 2007-05-18 13:17 |只看该作者

发大水了。。。

这个争论似乎没有那么大的必要吧?在C++里面 引用的导入貌似是为了避免直接使用指针出现的空指针 野指针问题 至少提供了一种少犯错误的手段 但它毕竟只是一种手段 谁也不能保证你不会用错 能因为自己的误用就说这种手段无意义么?

论坛徽章:
0
80 [报告]
发表于 2007-05-18 15:23 |只看该作者
原帖由 思一克 于 2007-5-18 10:59 发表
”只要是对象,在java中都是经传值的方式传进去这个对象的引用“

含义就是传对象的指针?


理论上,Java, C只有一种传参方式,那就是传值
只是传值的内涵不一样而已
比如C中
void func(int * a);这个函数
本质上,指针也是一个变量而已
这个函数用传值的方式传递了指针这个值,
只是这个值比较特殊,它可以访问别的对象,从而改变别的对象的值.

其实不需要把指针看的很神秘,它也是一个普通变量,只是它可以间接访问别的变量而已

[ 本帖最后由 ypxing 于 2007-5-18 15:31 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP