设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1902|回复: 3
打印 上一主题 下一主题

&的问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 04:23:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
const int & r ;和const int r ;是不是一样的啊?请高手指点。
4#
发表于 2009-11-3 04:23:46 | 只看该作者
我刚查到的资料:



引用经常用于“按引用传递(pass-by-reference)”:
void swap(int& i, int& j)
{
int tmp = i;
i = j;
j = tmp;
}

int main()
{
int x, y;
// ...
swap(x,y);
}
此处的 i 和 j 分别是main中的 x 和 y。换句话说,i 就是 x —— 并非指向 x 的指针,也不是 x 的拷贝,而是 x 本身。对 i 的任何改变同样会影响 x,反之亦然。
OK,这就是作为一个程序员所认知的引用。现在,给你一个不同的角度,这可能会让你更糊涂,那就是引用是如何实现的。典型的情况下,对象 x 的引用 i 是 x 的机器地址。但是,当程序员写 i++ 时,编译器产生增加 x 的代码。更详细的来说,编译器用来寻找 x 的地址位并没有被改变。C 程序员将此认为好像是 C 风格的按指针传递,只是句法不同 (1) 将 & 从调用者移到了被调用者处,(2)消除了*s。换句话说,C 程序员会将 i 看作为宏 (*p),而 p 就是指向 x 的指针(例如,编译器自动地将潜在的指针解除引用;i++被改变为 (*p)++;i = 7 被自动地转变成 *p = 7)。
很重要:请不要将引用看作为指向一个对象的奇异指针,即使引用经常是用汇编语言下的地址来实现的。引用就是对象。不是指向对象的指针,也不是对象的拷贝,就是对象。
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 04:23:45 | 只看该作者
感谢上面的回答,我前几天也看过函数形参里是这种形式,比如发function(float &a,float &b).
回复 支持 反对

使用道具 举报

2#
发表于 2009-11-3 04:23:45 | 只看该作者
不一樣吧, const int & r, r 是對某個 int 常數的引用吧.
const int r, r 是指某個 int 常數.

在使用方面則沒甚麽.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 14:31 , Processed in 0.129837 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表