C++下的引用类型

来源:互联网 发布:中国软件外包公司 编辑:程序博客网 时间:2024/06/13 01:58

什么是引用?

引用类型也称 别名,这样说就比较好理解了吧,他是一个比较有意思的东西。

在C++中你可以把它看做是另外的一种指针,通过引用类型,我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。引用对象采用类型名加上&符号,和名称的方式定义。例如:(int &test;),这里我们就定义了一个名为test的引用,但是int &test;这样的定义方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &test = 变量名;)

#include <iostream>using namespace std;int main() {int a = 10;int &test = a;test = test+2;cout<<&a<<"|"<<&test<<"|"<<a<<"|"<<test<<endl;cin.get();}

观察并编译运行上面的代码,你会发现&a和&test的地址是相同的,a和test的值显示也是一样的。


结合const来说:const修饰如果在引用上会有一个特别之处,它的奥秘就在于可以进行不同类型的对象的初始化,而这一切在普通变量的操作上是不可能实现的。


#include <iostream>using namespace std;int main() {int a = 10;const double &test = a + 1.2f;cout << &a << "|" << &test << "|" <<a <<"|"<< test << endl;cin.get();}

这里如果去掉 const 是会报错的。

这里就实现了用int给double赋值的功能。


道理是这样的,const修饰过后的引用在编译器内部是这样变化的:


int  a = 10;

const double &test = a+1.2f;


这样一段代码在编译器认为却是这样工作的:

int a = 10;

int temp = a;

const double &test = temp + 1.2f;

这里其实是把a的值付给了一个临时变量,而后test 获得的却是temp+1.2f改变的是temp而不是a,所以出现了a和test显示的值是不一样的。

原创粉丝点击