探究函数返回值、返回引用

在一个类中,

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

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

#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的别名。



猜你喜欢

转载自www.cnblogs.com/single-dont/p/10424259.html