zoukankan      html  css  js  c++  java
  • C++之引用

    引用即别名。引用不是对象,只是为已经存在的对象所起的另一个名字。

    格式:数据类型 &别名 = 原名

    注意点:

    1)引用必须初始化,初始化后不可改变。

    2)不能定义引用的引用(因为引用不是对象)。

    3)引用可作为函数参数(值传递,地址传递,引用传递)

    4)引用作为函数返回值,不可以返回局部变量的引用。
    例子:

    int& func()
    {
        int num = 10; //局部变量在栈区
        return num;
    }
    
    int main()
    {
        int& ref = func();
        cout << "ref = " << ref << endl;
        //cout << "ref = " << ref << endl;
        return 0;
    }
    

    codeblocks无返回结果,会出现错误信息。

    5)引用是函数返回值,函数调用可作为左值
    例子:

    int& func()
    {
        static int num = 10;   //静态变量在全局区
        return num;
    }
    
    int main()
    {
        int& ref = func();
        cout << "ref = " << ref << endl;
        func() = 20;             //相当于做了num=20的操作
        cout << "ref = " << ref << endl;  //ref又是num的别名,所以也是20
        return 0;
    }
    

    输出结果:
    ref = 10
    ref = 20

    6)引用本质:引用在C++内部实现是一个指针常量
    例子:

    void func(int& ref)
    {
        ref = 100;  //ref是引用,转换为*ref = 100
    }
    
    int main()
    {
        int a = 10;
        
        //自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改
        int& ref = a;
        ref = 20;    //内部发现ref是引用,自动帮我们转换为:*ref = 20;
        
        cout << "a: " << a << endl;
        cout << "ref: " << ref<< endl;
        
        func(a);
        return 0;
    }
    
  • 相关阅读:
    ORACLE触发器简单列子
    接口测试中需要携带token的接口返回结果偶尔报无权限
    接口自动化测试用例偶尔报无权限的解决办法
    python中的faker库生成数据,并写入txt文本中
    anaconda在sys.path删除~/.local/lib
    题解12/12 模拟赛
    题解BalticOI 2020
    题解12/09 模拟赛
    亿些原古博客汇总
    bijective proof problems 选做
  • 原文地址:https://www.cnblogs.com/echobiscuit/p/12912255.html
Copyright © 2011-2022 走看看