引用必须初始化;
一般在初始化变量时,初始值会被拷贝到新建对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始化对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
引用并非对象,只是为一个已经存在的对象所起的另外一个名字。
定义一个引用后,对其进行的所有操作都是在与之绑定的对象上进行的。
为引用赋值,实际上是把值赋给了与引用绑定的对象。
因为引用不是一个对象,所以不能定义引用的引用。
int &b = 10l;//引用类型初始值必须是一个对象,不能是常数;
double a = 3.2;
int &c = a;//此处引用初始值必须是int型对象;
拷贝大的类类型对象或者容器对象比较低效,甚至有的类类型(包括IO类型在内)根本不支持拷贝操作。当某种类型不支持拷贝操作时幂函数只能通过引用形参访问该类型的对象。
比如编写比较两个string对象的长度,因为string对象可能会比较长,所以尽量避免直接拷贝它们,使用引用形参是比较明智的做法。又因为比较长度无须改变string对象的的内容,所以把形参定义成对常量的引用。
bool isShorter(const string &s1,const string &s2)
{
return s1.size()<s2.size();
}
注:如果函数无须改变引用形参的值,最后将其声明为常量引用。