引用变量在创建的时候就必须初始化。无法创建一个未被初始化的引用。
#include
using namespace std;
int main()
{
int x=10;
int y=20;
int &r1;
}
编译结果: 如果引用未被初始化,编译将报错。 修改引用: 引用总是指向初始化的那个变量,也就是说,引用一旦被创建并初始化之后就无法改变。这一规则有点让人迷惑。、 如果声明了一个引用的同时使用一个变量赋值了,那么这个引用就会一直指向这个变量。 在此后使用变量对引用赋值,被引用变量的值变为被赋值变量的值。而引用不会因此更新从而指向这个变量。 例子:
#include
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
using namespace std;
int main()
{
int &r1=11;
}
编译结果:(rvalue是右值的意思,lvalue是左值,rightvalue,leftvalue) 这句语句意味着可以改变11的值,而这样做是没有意义的。 但是如果是const的引用,则可以运行。
—————————————————————————————————————————————————— //写的错误或者不好的地方请多多指导,可以在下面留言或者给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。 转载请注明出处:https://www.royalchen.com/ author:royalchen Email:royalchen@royalchen.com ———————————————————————————————————————————————————
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/c学习笔记29,引用变量(1)/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!