声明一个引用时,必须同时对他进行初始化,试图指向一个已存在的对象
一旦一个引用被初始化后,就不能改为指向其他对象
引用不是对象,一个引用只是对象的别名。所以没有引用的引用(引用的是对象才行)
引用本身就不能重新绑定到其他对象,在某种程度上来说所有的引用都是"const"的
引用有没有const修饰仅仅限定了能对引用做的事,而不是我们可以修改引用的绑定对象
一旦一个引用被初始化后,就不能改为指向其他对象
引用不是对象,一个引用只是对象的别名。所以没有引用的引用(引用的是对象才行)
引用多数情况出现在函数传参。参数传递有按值调用和引址调用。按值调用就是实参复制到形参,形参的任何操作影响实参;而引址调用则是传递实参的引用或指针,对传递参数的操作也是对实参的操作,如果不想对实参有更改则在传递的参数前声明const。
对于参数是对象的,采用按值引用需要很多时间在形参的复制上。这并不是我们期望的,而使用引用或指针就能解决,若想保护对象,加上const就好。
关于指向派生类的基类指针和基类引用的访问范围:
(1)指向派生类的基类指针或者引用,其类型仍然属于基类类型,而不是派生类类型,尽管它指向的是派生类。其访问范围受其基类类型影响,因此只能访问基类中可以访问的类型。
(2)对于虚函数,使用指向派生类的基类指针或基类引用访问时,将会体现出多态性,调用的是实际上是派生类的对应函数。
(3)对于指向派生类的基类引用,虽然说引用通常是被引用对象的一个别名,但这里,基类引用的访问范围与被引用对象的访问范围明显是不一样的!
一句话这样总结:当基类类型的指针或引用使用派生类的对象时,它对虚函数的调用,实际上是调用了被指向对象类的函数。注意,取决于被指向对象。
当它对非虚函数调用时,会使用基类自身的函数。
const reference is reference to const.
A reference is not an object, so we cannot make a reference itself const.引用本身就不能重新绑定到其他对象,在某种程度上来说所有的引用都是"const"的
引用有没有const修饰仅仅限定了能对引用做的事,而不是我们可以修改引用的绑定对象
int i = 42;
const int &r1 = i; //常引用可以绑定Nonconst变量
const int &r2 = 42; //可以,42是常量,r2是常引用
const int &r3 = r1 * 2; //可以,常引用就是这么吊
int &r4 = r * 2; //错误,非const引用没有这么强大
int i = 42;
int &r1 = i; //r1是i的引用
const int &r2 = i; // r2是i的常引用,不能通过r2更改i
r1 = 0; //ok
r2 = 0; //error