zoukankan      html  css  js  c++  java
  • c++的引用

    假如定义了某个变量的别名,该别名就永远属于这个变量,它是某个变量的别名的这个身份我们无法更改,但是我们可以更改它所引用的值

    定义引用的时候一定要记得对该引用进行初始化,引用就是常量,我们只能对它初始化,不能赋值,

    下面用代码演示上述语句

    #include <iostream>
    using namespace std;
    int main()
    {
        int a;
        int &ra = a;
        a = 999;
        cout << "&a:	" << &a << endl;
        cout << "&ra:	" << &ra << endl;
        cout << "
    ";
        int b = 888;
        ra = b;
        cout << "&a:	" << &a << endl;
        cout << "&ra:	" << &ra << endl;
        cout << "&b:	" << &b << endl;
        cout << "a:	" << a << endl;
        cout << "ra:	" << ra << endl;
        cout << "b:	" << b << endl;
        cout << "
    ";
        ra = 1;
        cout << "&a:	" << &a << endl;
        cout << "&ra:	" << &ra << endl;
        cout << "&b:	" << &b << endl;
        cout << "a:	" << a << endl;
        cout << "ra:	" << ra << endl;
        cout << "b:	" << b << endl;
        return 0;
    }

     当然也可以定义对象的别名,代码如下:

    /*定义对象的别名*/
    #include <iostream>
    using namespace std;
    class Human
    {
    public:
        int get() {return i;}
        void set(int x) {i = x;}
    private:
        int i;
    };
    int main()
    {
        Human Mike;
        Human &rMike = Mike;
        rMike.set(111);
        cout << "Mike:" << Mike.get() << endl;
        cout << "rMike:" << rMike.get() << endl;
        return 0;
    }

     空引用:

    我们知道指针进行删除操作后,需要将他们赋值为空,而引用却不需要这么做,这是因为引用是原来对象的别名,假如该对象存在于栈中,那么在对象超出作用域的时候别名会和对象一起消失,加入该对象存在于堆中,由于堆中的内存空间必须使用指针来访问,因此也用不着别名,即使再定义一个该指针的别名,那么将改地址删除并赋空之后该指针的别名中的地址也相应的赋空了

  • 相关阅读:
    多线程05.thread不知道的知识
    多线程04.策略模式
    多线程03.实现Runnable接口
    多线程02.继承Thread类
    多线程01.newThread的方式创建线程
    静态代理与动态代理
    从零开始学Kotlin第七课
    项目需求变更维护难.....
    加密算法入门
    将重复的数据合并成一行-反射
  • 原文地址:https://www.cnblogs.com/rain-1/p/4853196.html
Copyright © 2011-2022 走看看