什么是引用?
引用类型也称 别名,这样说就比较好理解了吧,他是一个比较有意思的东西。
在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显示的值是不一样的。