假如定义了某个变量的别名,该别名就永远属于这个变量,它是某个变量的别名的这个身份我们无法更改,但是我们可以更改它所引用的值
定义引用的时候一定要记得对该引用进行初始化,引用就是常量,我们只能对它初始化,不能赋值,
下面用代码演示上述语句
#include <iostream> using namespace std; int main() { int a; int &ra = a; a = 999; cout << "&a: " << &a << endl; cout << "&ra: " << &ra << endl; cout << " "; int b = 888; ra = b; cout << "&a: " << &a << endl; cout << "&ra: " << &ra << endl; cout << "&b: " << &b << endl; cout << "a: " << a << endl; cout << "ra: " << ra << endl; cout << "b: " << b << endl; cout << " "; ra = 1; cout << "&a: " << &a << endl; cout << "&ra: " << &ra << endl; cout << "&b: " << &b << endl; cout << "a: " << a << endl; cout << "ra: " << ra << endl; cout << "b: " << b << endl; return 0; }
当然也可以定义对象的别名,代码如下:
/*定义对象的别名*/ #include <iostream> using namespace std; class Human { public: int get() {return i;} void set(int x) {i = x;} private: int i; }; int main() { Human Mike; Human &rMike = Mike; rMike.set(111); cout << "Mike:" << Mike.get() << endl; cout << "rMike:" << rMike.get() << endl; return 0; }
空引用:
我们知道指针进行删除操作后,需要将他们赋值为空,而引用却不需要这么做,这是因为引用是原来对象的别名,假如该对象存在于栈中,那么在对象超出作用域的时候别名会和对象一起消失,加入该对象存在于堆中,由于堆中的内存空间必须使用指针来访问,因此也用不着别名,即使再定义一个该指针的别名,那么将改地址删除并赋空之后该指针的别名中的地址也相应的赋空了