探究函数返回值、返回引用
在一个类中,
函数返回“值类型”:在执行=(赋值)时,在内存中会出现临时对象,由临时对象执行=(赋值操作)。
函数返回“引用类型”:在执行=(赋值)时,而不会出现临时对象情况,只对数据进行了拷贝。
#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的别名。