分享
 
 
 

C++ FAQ阅读笔记[2]--引用

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

[8.1] 什么是引用?

一个对象的别名(一个替换的名字)叫引用

引用经常被用来做在函数参数的引用传递中

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进行操作,反之也是一样的。

这样就是你作为一个程序对于引用应该了解的。现在,冒着通过给你一个不同的视角来你感到迷惑的危险,解释一下引用是如何实现的。在最底层中,对象x的一个引用i是对象x的机器地址。但是如果程序员执行i++的时候,编译器会生成让x自增的代码。特别是,编译器用来查找x的的地址位并没有发生改变。一个C程序员会把这个想象为C中的指针调用。换句话说,C程序员会把i想象为*p的一个,这里p是指向x的一个指针(例如,编译器会自动地反引用底层的指什;i++就被换为成了(*p)++;i=7会自动被成*p=7)。

注意 : 甚至引用经常是通过使用底层的汇编语言来实现的,请不要把引用想象成一个对象的一个长相奇怪的指针,一个引用就是一个对象。它不是指向对象的指针,也不是对象一个拷贝。它就是那个对象。

[8.2] 如果对一个引用赋值会发生什么呢?

你可以改变一个引用体(referent)的状态(引用体referent就是引用引到的那个对象)

记住: 引用就是引用体,如果改变引用就可以直接改变引用体的状态。用编译器编写者的术语来叫,一个引用就是一个"左值"("lvalue")(就是可以出现在的赋值符左端的东西)

[8.3] 当你返回一个引用的时候会发生什么?

函数调用可以出现在赋值运算符的左端。

这样的能力开始可能会比较奇怪。例如,没有人会觉得f()=7有意义。但是,如果a是一个对象数组里的一个对象,很多人都会觉得a[i]=7是有意义的甚至a[i]其实是一个伪装起来的函数调用(它就是数据的[]调用: Array::operator[](int),它就是数组类的一个子脚本的运算符).

class Array {

public:

int size() const;

float& operator[](int index);

//..

};

int main()

{

Array a;

for(int i=0;i a[i]=7; //这一行就调用了Array::operator[](int)}[8.4] 如何让一个引用重新引用到另外一个对象上?这是不可能的你不能把引用体从引用身上分离出来与指针不一样,如果一个引用被绑定到对象中,它就可以重赋值到另一个对象中。如果引用对象本身不是一个对象(它没有标志信息,取得引用的地址就得到了引用体的地址;记住,引用就是引用体自己)在这种意义下,一个引用与一个常指针,比如说int* const p是相似的(与一个像const int* p的指向常数的指针相反).尽管有这些相似性,请不要把引用与指针相混,它们是完全不一样的东西。[8.5] 我什么时候用引用,什么时候用指针呢?只要能用就用引用,不得以的情况下再用指针。当你不需要进行重赋值的时候,使用通常是比指针更好的解决方法。这通常就是说,引用是一个类的公有成员接口最有用的部分。引用经常显示一个对象的外表,而指针通常是内部的内容。上面所讲的一种例外情况是当一个函数参数或是返回值需要一个"守卫"引用。它经常是通过返回或接受一个指针来实现,这样被认为是最佳的实现方式,那么给一个空指针就会造成麻烦(引用总是与对象相关联的,而不会是一个空的指针).注意: 一个老的C程序员有时候有时候不喜欢引用因为它提供了一个在调用代码中已清晰说明了的引用方法。然而在有一些C++编程经验之后,你可以很快认识到这是一种信息隐藏的方法,它是一种财产,而不是一种责任。比如说,程序员应该针对问题写代码,而不是针对机器语言写代码。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有