C++学习笔记29,引用变量(1)
引用变量在创建的时候就必须初始化。无法创建一个未被初始化的引用。
#include <iostream> using namespace std; int main() { int x=10; int y=20; int &r1; }编译结果:
假设引用未被初始化。编译将报错。
改动引用:
引用总是指向初始化的那个变量,也就是说,引用一旦被创建并初始化之后就无法改变。这一规则有点让人迷惑。
、
假设声明了一个引用的同一时候使用一个变量赋值了,那么这个引用就会一直指向这个变量。
在此后使用变量对引用赋值,被引用变量的值变为被赋值变量的值。而引用不会因此更新从而指向这个变量。
样例:
#include <iostream> using namespace std; int main() { int x=10; int y=20; cout<<"&x="<<&x<<endl <<"&y="<<&y<<endl; //初始化引用,r1指向x int &r1=x; cout<<"&r1="<<&r1<<",r1="<<r1<<endl; //这里仅仅是改变了r1的值,并没有改变r1指向的引用 r1=y; cout<<"&r1="<<&r1<<",r1="<<r1<<endl; //更改引用也会更改原来的值 r1=30; cout<<"&r1="<<&r1<<",r1="<<r1<<endl; cout<<"finally &x="<<&x<<",x="<<x<<endl; cout<<r1<<endl; cin.get(); }执行结果:
注意:对引用取地址的结果和对被引用的变量取地址的结果是同样的!
能够看出,改变的仅仅是引用变量x的值,并没有改变引用的指向.
也许你试图想通过在给引用赋值的时候取y的地址,绕过这一限制,r1=&y;
可是这样编译会报错
r1的实质是一个int型的引用。而&y则是一个int的指针。两者不能转换。
无法创建未命名值(比如一个整型值11。实质上这就是一个右值)的引用,除非这是一个const值。
#include <iostream> using namespace std; int main() { int &r1=11; }编译结果:(rvalue是右值的意思,lvalue是左值,rightvalue,leftvalue)
这句语句意味着能够改变11的值,而这样做是没有意义的。
可是假设是const的引用。则能够执行。