引用究竟有什么用

sity 2000-12-06 04:40:00
我对引用的用法始终不很清楚,比如,常见下面的用法:
CRect rect;
GetClientRect(&rect);
pDC->DrawText("my message",rect,DT_BOTTOM);
但我把第2行的&去掉后,执行效果是一样的,不知这里的引用到底有什么用。
与此相仿,我还见过这样的例子,在一个类的源文件中有如下语句:
CMyClass myClass;
CMyClass& MyFunc()
{
return myClass;
}
这里也用了引用,我如果不用引用行不行,多谢指点。

...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MicroWU 2000-12-06
  • 打赏
  • 举报
回复
引用也就是别名
函数的参数是引用时,她得到的是实参本身,而不是其拷贝,也就是说,实参和形参指向同一内存地址,这样做的好处是避免了通常的参数栈传递,”费时又费力“,尤其是对象较大时。当然,对形参的任何改变都将传递到实参。
函数的返回值是引用时,唯一的好处是函数调用可以出现在赋值表达式的左边,也就是说可以成为左值,例如MyFunc()=OtherClass.
Hidy 2000-12-06
  • 打赏
  • 举报
回复
C语言中参数是按值传输的,你不知道吗?

在标准C中要改变参数的值唯一的办法就是传输地址,

在C++中用引用类型来传输参数,我想道理跟传输地址应该一样,

但比传输地址简单。
vcbear 2000-12-06
  • 打赏
  • 举报
回复
c语言的“&”不是取某一个变量的地址嘛,如 int i;int *pi=&i;*(&i)=1;
我没有学过C++,也知道实际上对于CRect这样的东东来说,其地址偏移为0的
地方,放了一个RECT结构体,&Rect当然可以取到RECT的地址了。
vcbear 2000-12-06
  • 打赏
  • 举报
回复
c语言的“&”不是取某一个变量的地址嘛,如 int i;int *pi=&i;*(&i)=1;
我没有学过C++,也知道实际上对于CRect这样的东东来说,其地址偏移为0的
地方,放了一个RECT结构体,&Rect当然可以取到RECT的地址了。
Sunlet 2000-12-06
  • 打赏
  • 举报
回复
引用的实质是指针。就想pascal中的var...懂吗?不过,引用比var更有用,更灵活。
qiaojiannan 2000-12-06
  • 打赏
  • 举报
回复
应该是个很简单的问题吧,怎么没人来回答你。

如果你对引用不十分理解,建议你好好学学C++吧!

之所以 &rect 和 rect 一样,是因为CRect类重载了 & (实际上是LPRECT) 运算符.所以 对RECT 或 LPRECT 为参数的函数用哪一个都行,但 PRECT 只能用 &rect .
beginners 2000-12-06
  • 打赏
  • 举报
回复
引用参数在调用时,调用的是原参数,而不是其拷贝。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧