在什么时候需要使用“常引用”?
2016-10-11 18:06
295 查看
在什么时候需要使用“常引用”?
2014年10月27日 ⁄ 综合 ⁄ 共 2061字 ⁄ 字号 小 中 大 ⁄ 评论关闭<iframe id="iframeu1788635_0" src="http://pos.baidu.com/vclm?rdid=1788635&dc=2&di=u1788635&dri=0&dis=0&dai=2&ps=236x908&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1476179819863&ti=%E5%9C%A8%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E9%9C%80%E8%A6%81%E4%BD%BF%E7%94%A8%E2%80%9C%E5%B8%B8%E5%BC%95%E7%94%A8%E2%80%9D%EF%BC%9F%20%7C%20%E5%AD%A6%E6%AD%A5%E5%9B%AD&ari=2&dbv=2&drs=1&pcs=1364x589&pss=1364x256&cfv=0&cpl=5&chi=1&cce=true&cec=UTF-8&tlm=1476179819&rw=589<u=http%3A%2F%2Fwww.xuebuyuan.com%2F2195805.html<r=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dr94_79NhStTsc4R3RYdDUePRp8C3deB4MwxWlTYRry6EXM-Nekq2y6TYcz7A-uIE%26wd%3D%26eqid%3D8d182460000039660000000257fcb767&ecd=1&psr=1366x768&par=1366x728&pis=-1x-1&ccd=24&cja=false&cmi=7&col=zh-CN&cdo=-1&tcn=1476179820&qn=8f5e90291709f0d6&tt=1476179819700.242.884.886" width="336" height="280" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="margin: 0px; padding: 0px; border-width: 0px; border-style: initial; background: transparent; vertical-align: bottom;"></iframe>
在什么时候需要使用“常引用”?
如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型标识符 &引用名=目标变量名;
例1
int a ;
const int &ra=a;
ra=1; //错误
a=1; //正确
例2
string foo( );
void bar(string & s);
那么下面的表达式将是非法的:
bar(foo( ));
bar("hello world");
原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。
引用型参数应该在能被定义为const的情况下,尽量定义为const 。
5. 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?
格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }
好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!
注意事项:
(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++[1]的Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。
相关文章推荐
- 在什么时候需要使用“常引用”?
- 在什么时候需要使用“常引用”?
- 在什么时候需要使用“常引用”?
- 什么时候需要使用引用
- 在什么时候需要使用“常引用”?
- 什么时候使用引用?和什么时候使用指针
- .Net中删除未使用的命名空间及快速引用需要的命名空间,并指定快捷键。
- PHP中使用foreach引用需要注意的问题
- C++建立单向链表链表头指针需要使用指针类型的引用参数?
- C++什么时候使用引用
- 什么时候使用引用?什么时候使用指针?什么时候安置传递?
- C++-什么时候需要在类的构造函数中使用初始化列表
- web项目中代码引用了本地包,又需要使用maven打war包时,pom的配置方法
- 使用ConfigurationManager需要在.net引用中添加System.Configuration引用
- 函数在什么时候需要“引用”类型的参数
- 7.1.15 什么时候需要将引用作为返回值
- PHP的foreach中使用引用时需要注意的一个问题和解决方法
- 在函数返回值需要使用到强制类型转换时,最好使用指针,光使用引用不保险
- PHP的foreach中使用引用时需要注意的一个问题和解决方法
- 使用VS2010编译OSG需要在头部添加iterator引用的文件清单