zoukankan      html  css  js  c++  java
  • 探究函数返回值、返回引用

    在一个类中,

    函数返回“值类型”:在执行=(赋值)时,在内存中会出现临时对象,由临时对象执行=(赋值操作)。

    函数返回“引用类型”:在执行=(赋值)时,而不会出现临时对象情况,只对数据进行了拷贝。

    #include<iostream>
    using namespace std;
    float temp;
    float fn1(float r){
        temp=r*r;
        return temp;
    } 
    float &fn2(float r){ //&说明返回的是temp的引用,换句话说就是返回temp本身
        temp=r*r;
        return temp;
    }
    int main(){
        float a=fn1(2.0); //case 1:返回值
        //float &b=fn1(5.0); //case 2:用函数的返回值作为引用的初始化值 [Error] invalid initialization of non-const reference of type 'float&' from an rvalue of type 'float'
                               //(有些编译器可以成功编译该语句,但会给出一个warning) 
        float c=fn2(2.0);//case 3:返回引用
        float &d=fn2(2.0);//case 4:用函数返回的引用作为新引用的初始化值
        cout<<a<<endl;//cout<<b<<endl;
        cout<<c<<endl;
        cout<<d<<endl;
        return 0;
    }
    注意:
    1.fn1返回值类型,=(赋值)给变量a。它会在内存中产生temp的副本来给a赋值。
    2.fn1返回值类型,=(赋值)给引用性变量是错误的。
    3.fn2返回引用类型,=(赋值)给变量c,它直接给c拷贝自己的副本。
    4.fn2返回引用类型,=(赋值)给引用变量d,d之后就会是temp的别名。



  • 相关阅读:
    VUE学习一,安装及Hello World
    609. 在系统中查找重复文件
    451. 根据字符出现频率排序
    面试题 10.02. 变位词组
    142. 环形链表 II
    面试题 16.24. 数对和
    151. 翻转字符串里的单词
    1207. 独一无二的出现次数
    80. 删除排序数组中的重复项 II
    1365. 有多少小于当前数字的数字
  • 原文地址:https://www.cnblogs.com/single-dont/p/10424259.html
Copyright © 2011-2022 走看看