zoukankan      html  css  js  c++  java
  • 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的引用。则能够执行。



  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5137633.html
Copyright © 2011-2022 走看看