【摘录】引用是别名而并非指针

本文摘自《C++CommonKnowledge》,详细解释了C++中引用与指针的主要区别,包括不存在空引用、所有引用都需要初始化以及引用永远指向初始化时的对象。文中还通过实例说明了如何使用指向常量的引用。

摘自《C++ Common Knowledge》

人们常常会将指针和引用混淆,原因大概在于C++编译器通常采用指针的方式实现引用,但引用其实不是指针,其行为和指针并不相同。

 

引用和指针存在三大区别:

一,不存在空引用;

int &a=*static_cast<int*>(0);   //错误

二,所有引用都要初始化;

三,一个引用永远指向用来对他初始化的那个对象

 

一个指向非常量的引用是不可以用字面常量或临时值进行初始化的:

double &cd=12.3; //错误

然而,一个指向常量的引用就可以:

const double &cd=12.3; //正确

template <typename T>

T add(const T &a,const T &b)

{

return a+b;

}

//…

const std::string &greeting=add(std::string(“hello”),

std::string(“,world”)); //正确

当一个指向常量的引用采用一个字面值来初始化时,该引用实际上被设置为指向采用该字面值初始化的一个临时位置。因此,cd并非真的指向字面值12.3,而是指向一个采用12.3初始化的类型为double的临时变量。

greeting引用则指向对add的调用所返回的无名临时string值。一般来说,这类临时对象在创建它们的表达式的末尾被销毁(离开作用域并且析构函数被调用)。然而,当这类临时对象用于初始化一个指向常量的引用时,在引用指向他们的期间,这些临时对象会一直存在。

转载于:https://www.cnblogs.com/mx113/archive/2010/02/17/1668958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值