码迷,mamicode.com
首页 > 编程语言 > 详细

C++学习笔记29,引用变量(1)

时间:2014-06-22 22:22:59      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:c++

引用变量在创建的时候就必须初始化。无法创建一个未被初始化的引用。

#include <iostream>
using namespace std;
int main()
{
    int x=10;
    int y=20;
    int &r1;
}
编译结果:

bubuko.com,布布扣
如果引用未被初始化,编译将报错。


修改引用:

引用总是指向初始化的那个变量,也就是说,引用一旦被创建并初始化之后就无法改变。这一规则有点让人迷惑。、

如果声明了一个引用的同时使用一个变量赋值了,那么这个引用就会一直指向这个变量。

在此后使用变量对引用赋值,被引用变量的值变为被赋值变量的值。而引用不会因此更新从而指向这个变量

例子:

#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();



}
运行结果:

bubuko.com,布布扣

注意:对引用取地址的结果和对被引用的变量取地址的结果是相同的!

可以看出,改变的只是引用变量x的值,并没有改变引用的指向.

或许你试图想通过在给引用赋值的时候取y的地址,绕过这一限制,r1=&y;

但是这样编译会报错

bubuko.com,布布扣

r1的实质是一个int型的引用,而&y则是一个int的指针,两者不能转换。


无法创建未命名值(例如一个整型值11,实质上这就是一个右值)的引用,除非这是一个const值。

#include <iostream>
using namespace std;
int main()
{
    int &r1=11;
}
编译结果:(rvalue是右值的意思,lvalue是左值,rightvalue,leftvalue)
bubuko.com,布布扣

这句语句意味着可以改变11的值,而这样做是没有意义的。

但是如果是const的引用,则可以运行。

bubuko.com,布布扣


C++学习笔记29,引用变量(1),布布扣,bubuko.com

C++学习笔记29,引用变量(1)

标签:c++

原文地址:http://blog.csdn.net/qq844352155/article/details/32732333

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!