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

    C++的个人学习之路!引用实际上是对指针的封装,引用函数的返回值是在程序设计中常用到的用法,下面我们来了解下它是怎么用的

    引用的本质

    引用的本质在C++内部实现是一个指针常量

    在用的时候我们前面别想那么多,引用设计的概念就是让程序员可以方便地进行指针操作,如果你每次用的时候还要想这是个常量引用我要注意什么什么什么,那它出现的意义就变得很小了。

    引用作为函数的返回值

    使用引用做函数的返回值的时候要注意两点:

    1. 不要返回局部变量的引用
    2. 函数的调用可以作为左值(引用的变量必须不是局部变量)

    下面看下两个测试案例理解上面的知识点:

    #include <iostream>
    using namespace std;
    int& test1()
    {
    	int a = 1;//局部变量存放在内存四区的栈区中
    	return a;
    }
    
    int& test2()
    {
    	static int a = 1; //静态变量存放在全局去区,数据在程序结束后由系统释放
    	return a;
    }	
    int main()
    {	//引用做函数的返回值
    	//1、不要返回局部变量的引用
    	int &ref1 = test1();
    	cout << "ref1 = " << ref1 << endl;//1 第一次编译结果正确,是因为编译器做了保留
    	cout << "ref1 = " << ref1 << endl;//乱码,结果错误,因为a的内存已经释放
    
    	//2、函数的调用可以作为左值
    	int &ref2 = test2();
    	cout << "ref2 = " << ref2 << endl;//1 编译结果正确
    	cout << "ref2 = " << ref2 << endl;//1 编译结果正确,因为返回的是静态变量,生命周期结束在程序结束后,所以还是可以访问到这个内存
    	//调用作为左值
    	test2() = 100;
    	cout << "ref2 = " << ref2 << endl;//100
    	cout << "ref2 = " << ref2 << endl;//100
    	//因为test2()返回的其实就是函数里面a的引用
    	//既然是引用当然是可以把它当作a的别名。使用它给a所在的内存赋值
    
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    python+opencv实现图像自适应阈值的均衡化
    ubuntu添加新的分辨率选项(干货)
    python+opencv检测图像清晰度
    python根据列表创建文件夹,拷贝指定文件
    牛客多校Round 4
    牛客多校Round 3
    HDU多校Round 2
    HDU多校Round 1
    牛客多校Round 2
    牛客多校Round 1
  • 原文地址:https://www.cnblogs.com/deehuang/p/14394776.html
Copyright © 2011-2022 走看看