博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gotchas 44-引用和临时对象
阅读量:7120 次
发布时间:2019-06-28

本文共 681 字,大约阅读时间需要 2 分钟。

摘要:

1)“引用必须用左值来初始化”基本上着意味着引用的初始化物必须具有一个地址,也有一个值(→常见错误6)。不过谈及指向常量的引用时,事情就开始变得复杂了。指向常量的引用仍然必须用左值来初始化,不过编译器很乐意——在特定的情况下——为此从一个非左值出发来创建一个左值(临时对象):
const int &r3=12;//没问题
引用r3指向编译器隐式分配内存并创建的匿名int类型对象。一般情况下,这种编译器的生存期持续到权表达式结束处①。不过“在这种特例下,标准网开一面,保证临时对象会和以其为初始化物的引用共存亡”。“请注意该对象与以其为初始化物的引用之间并无联接纽带”。②
2)“编译器还会为身为左值的初始化物产生临时对象。并与这个引用(声明时)指向的类型不一样:”
const string &name="Fread";//没问题
short s=123;
const int &r4=s;//没问题
s=345;//r4的值仍是123③
const int *ip=&r4;//并非s的地址
“此处的初始化物只是个临时的匿名对象,而非源代码中显示写明的那个变量。”
=====================================================
注释:
①参看string类的c_str成员函数的用法。
②万幸下面这段居心叵测的代码不会改变字面常量12的意义:
const_cast<int &>(r3)=11;//赋值给那个匿名对象或程序直接崩溃。
③const int类型的引用r4关联的只是那个编译器创建的临时对象

转载地址:http://janel.baihongyu.com/

你可能感兴趣的文章
插入排序
查看>>
修改注册表来修改IE的设置---资料汇总
查看>>
使用 CodeIgniter 框架快速开发 PHP 应用(四)
查看>>
BrnShop开源网上商城第一讲:架构设计
查看>>
.Net Framework System.Collections 集合类
查看>>
Java调用SQL Server的存储过程详解
查看>>
转豆瓣--梁海棠尽管死了,但却占领了陈少杰的身心。乔燕尽管还…
查看>>
JavaScript的隐式转换
查看>>
linux实用的日志分析脚本
查看>>
手机号码归属地查询
查看>>
HDU3123:GCC(同余模简单题)
查看>>
Visual Studio Developer Assistant 3月新功能展示
查看>>
SimpleDateFormat使用具体解释
查看>>
微信公众号发起微信支付 c#
查看>>
Qt widgets deeps--烧鸡
查看>>
Android StrictMode介绍
查看>>
JAVA Metrics 度量工具使用介绍1
查看>>
Spring mvc 返回json格式 - 龙企阁 - 博客频道 - CSDN.NET
查看>>
Android 数据库升级解决方案
查看>>
nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
查看>>