海盗王

不知道是第几代海盗了
随笔 - 2, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

普通引用和const引用的初始化

以前一直不明白一个问题,比如当声明
void  init(const string  & a,int b)

在调用的时候可以这样 
string s="This is  a  practice";
int  num=9;
 init(s,9);

我一直认为第一个参数必须接收一个string类型的引用才行.后来今天看到别人的文章才知道为什么,原来是这样的,系统帮我们做了一个临时变量,其实暗含一个隐式转换:
*********以下引用http://www.cppblog.com/rosinahua/archive/2007/01/15/17632.html的内容*********
    当引用的初始式是一个左值(是一个对象,你可以取得他的地址)时,其初始化就是非常简单的事情。普通T&的初始式必须是一个T类型的。而cosnt T&则不必是一个左值,甚至可以不是T类型的。在这样的情况下,经过以下几个步骤。
    (1)首先,如果需要的话,将应用到类型T的隐式类型转换。
    (2)而后,将结果存入一个类型T的临时变量。
    (3)最后,将此临时变量用作初始化的值。
例如
double& d=1;  //错误,初始式必须式左值
const double& cd=1;  //ok
对后一个初始化的解释是:
double temp=double(1);   // 首先建立一个具有正确数据类型的临时变量

const double& cd=temp;  //而后用这个临时变量作为cd的初始式

posted on 2007-06-20 15:13 不知道是第几代海盗 阅读(1273) 评论(0)  编辑 收藏 引用 所属分类: 基础类


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理