免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
31 [报告]
发表于 2007-05-16 11:53 |只看该作者
没有专到牛角尖。

这样的结论应该没有人反对
0)引用传递方式不是新事物,而是最早期的机构化语言所采用的
1)早期的一切传递都是引用的结构化语言是结构不好的。因为变量不太分局部和全局。而且不能将函数认为是输入输出的黑盒子。任何参数都会被调用者修改。
3)C的一个特点就是“低级”,和汇编有着清晰简单的对应。你读C程序,看见一个函数调用i = func(j, k),你不需要再找func的原来函数到底是什么就可以通过黑盒子方法实验出func的功能,或继续网下读。引用的引入使这一点不行了。
4)如果所有传递都是引用,和FORTRAN一样了

我说能不用尽量不用。必要时当然还要用的。


原帖由 net_robber 于 2007-5-16 11:26 发表
发现一个以前没有注意到的问题

引用在C中不可用,这是C++中的东西,呵呵

以前很少用这东西,呼呼

论坛徽章:
0
32 [报告]
发表于 2007-05-16 11:58 |只看该作者
原帖由 思一克 于 2007-5-16 11:53 发表
你读C程序,看见一个函数调用i = func(j, k),你不需要再找func的原来函数到底是什么就可以通过黑盒子方法实验出func的功能,或继续网下读。引用的引入使这一点不行了。


反对,例如
int func(int *i)
{
  ...
}

....

int i;
func(&i);
/* i 的地址是没有变,i 变没变呢?不知道.*/

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

论坛徽章:
0
33 [报告]
发表于 2007-05-16 12:00 |只看该作者
原帖由 ypxing 于 2007-5-15 19:58 发表


反对,例如
int func(int *i)
{
  ...
}

....

int i;
func(&i);
/*i的地址是没有变,i变没变呢?不知道*/


看到 func(&i) 难道还会认为 i 在 f 里面不会改变?

论坛徽章:
0
34 [报告]
发表于 2007-05-16 12:00 |只看该作者
原帖由 ypxing 于 2007-5-16 11:58 发表


反对,例如
int func(int *i)
{
  ...
}

....

int i;
func(&i);
/*i的地址是没有变,i变没变呢?不知道*/

人家的意思,在你这种情况下,是&i不会变。
参数本身不变,但是与参数相关的其它变量会不会变,这跟它没关系。

论坛徽章:
0
35 [报告]
发表于 2007-05-16 12:00 |只看该作者
int func(int *i);
i 志向的地方可能变也可能不变,但是这是明显告诉你的,那里可能被修改。
引用就不同了,没有提供任何信息。除非你找到func本身

论坛徽章:
0
36 [报告]
发表于 2007-05-16 12:03 |只看该作者
原帖由 emacsnw 于 2007-5-16 12:00 发表


看到 func(&i) 难道还会认为 i 在 f 里面不会改变?


不看func(int *i)的定义是不能确定的,i可能变,也可能不变

所以指针也带来了模糊性

论坛徽章:
0
37 [报告]
发表于 2007-05-16 12:05 |只看该作者
”所以指针也带来了模糊性“ 这个“模糊”是不需要参考其它地方而明显告诉你的。
引用func(i),没有告诉你。除非你去看func本身。

论坛徽章:
0
38 [报告]
发表于 2007-05-16 12:07 |只看该作者
原帖由 思一克 于 2007-5-16 12:00 发表
int func(int *i);
i 志向的地方可能变也可能不变,但是这是明显告诉你的,那里可能被修改。
引用就不同了,没有提供任何信息。除非你找到func本身


安全起见,你就应该认为引用的时候是可能改变的(正如你默认指针会改变i一样)
所以,如果要想调用func时不改变i,要调用前保存i,调用后回复i

论坛徽章:
0
39 [报告]
发表于 2007-05-16 12:08 |只看该作者
原帖由 ypxing 于 2007-5-16 12:03 发表


不看func(int *i)的定义是不能确定的,i可能变,也可能不变

所以指针也带来了模糊性

非也
func(int *i) 这样定义, i 一定是改变, 也许改变后的值 与先前一样。
否则就应该定义成 func(int i)
最最最基本的原则。

论坛徽章:
0
40 [报告]
发表于 2007-05-16 12:10 |只看该作者
原帖由 connet 于 2007-5-16 12:08 发表

非也
func(int *i) 这样定义, i 一定是改变, 也许改变后的值 与先前一样。
否则就应该定义成 func(int i)
最最最基本的原则。


把“可能”当“必然”
你这种认识是制造bug的源泉

"最最最基本的原则"?
那么有引用时候,大家也可以加几条原则呀
让大家不要想当然的使用

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP