Reference(引用)特点
-
Reference一般不用在变量的声明上,通常在参数传递时使用Reference(Pass by reference or Return by reference),原因:传入传出时速度更快~ -
本质是pointer(指针),引用的内部实现是通过指针实现的,编译器将其伪装成值,因此引用(Reference)可称为代表一个值
从内存分析
double x = 0;
double* p = &x;
double& r = x;
cout << sizeof(x) << endl;
cout << sizeof(p) << endl;
cout << sizeof(r) << endl;
cout << *p << endl;
cout << x << endl;
cout << r << endl;
cout << p << endl;
cout << &x << endl;
cout << &r << endl;
可以很清楚的看出指针占4个字节,而值和引用都占8个字节,因此引用与值的大小相同,地址相同,值多大,引用就是多大,这是编译器造成的假象,其实引用就是一个指针,是一种更漂亮的指针
为什么喜欢用Referencce
1.因为其本质是指针,所以传入传出时速度快,占用空间小
2.传入传出引用与传入传出值时格式高度一致
void func1(Cls* pobj) {pobj->xxx();}
void func2(Cls obj){obj.xxx();}
void func3(Cls& obj){obj.xxx();}
Cls obj;
func1(&obj);
func2(obj);
func3(obj);
const reference&non—const reference(常量引用与非常量引用的比较)
测试代码如下
double d = 3.14;
const int &r1 = d;
int &r2 = d;
为了确保r1、r1能够绑定一个整数,编译器会将代码转换成如下
const int temp = d;
const int &r1 = temp;
int temp = d;
int &r1 = temp;
代码运行图示
总结
常量引用 只要绑定的对象能够成功转换成引用的类型即可,非常量引用 则必须绑定类型一致的对象
注意事项
double imag(const double& im){....}
double imag(const double im){....}
|