关于引用:
引用和类一样,是C++中的重要概念,主要用于参数传递,使用引用传递而不是值传递,可在语言级提高程序的效率
概念:
引用就是对象 的另一个名字 。引用是一种复合类型(所谓复合类型,是指用其他类型定义的类型如指针,引用等都是符合类型),通过在变量名前添加“&”符合来定义。这就是说每一种引用类型都关联到某一其他类型。
引用在定义时必须用同类型 的对象 进行初始化 。看如下错误代码:
int &ref1=12;//error:12是字面值(没有地址),不是对象
int &ref2 ;//error:没有初始化
double dval=3.14;
int &ref3=dval;//error:不是同类型的,这个同类型严格的同类型,虽然存在double类型到int类型的转换。
但是看以下代码:
const int &ref4=12;//ok
const int &ref5=dval;//ok
矛盾出现,不是说只能用同类型 的对象 初始化么?难道const引用不是这样的?
事实上,const引用同样不是例外。只是情况变的有些复杂:const int &ref4=12;//ok
引用ref4指向了编译器创建了一个用自面值12初始化的临时对象。一般情况下,临时对象的生命期持续到全表达式结束,但在const引用时,临时对象与引用共存亡即意味着该引用一直存在,直到该对象超出作用域。
同样 const int &ref5=dval;//ok 编译器同样创建了一个临时对象,它(编译器而不是你)会把该语句转换如下代码:
int temp=dval;
const int &ref5=temp;
所以实际上仍旧是同类型的对象进行初始化的。