• 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的引用。则能够执行。



  • 相关阅读:
    iTOP-4412开发板-串口基础知识和测试方法
    迅为i.MX6ULL终结者开发板-能想到的功能它都有
    Android4.4.2 源码编译-iMX6Q/D核心板-非设备树源码
    如何让Dev支持c++11特性
    2019年第十届蓝桥杯【C++省赛B组】
    upper_bound()和low_bound函数的基本使用和理解(转载,已获博主授权)
    C++的bitset(位操作使用),转载
    2018年第九届蓝桥杯【C++省赛B组】(未完)
    2013蓝桥杯预赛C/C++本科B组
    信用卡号验证
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5137633.html
Copyright © 2020-2023  润新知