1.引用
#include<iostream>
using namespace std;
//引用不是变量
//引用仅仅是变量的别名
//引用没有自己独立的空间
//引用要与它锁引用的变量共享空间
//对引用所做的改变实际上是对它所引用变量的改变
//引用在定义的时候要进行初始化
//引用已经初始化,不能重新指向其它变量
int main(void)
{
int val = 100;
// int& refval; error C2530: “refval”: 必须初始化引用
int& refval = val;
refval = 200;
cout<<"val="<<val<<endl; //输出200
int val2 = 500;
refval = val2; //不代表将refval引用至val2这个变量
//仅仅只是代表将val2赋值给refval
cout<<"val="<<val<<endl;
}
2.const引用
#include<iostream>
using namespace std;
//const引用是指向const对象的引用
int main(void)
{
const int val = 1024;
const int& refval = val;
// int& ref2 = val; //Error,“初始化”: 无法从“const int”转换为“int &”
// refval = 200; //Error,refval是一个常量
int val2 = 1024;
const int& ref3 = val2; //const 引用指向非const对象
double val3 = 3.14;
const int& ref4 = val3; //会丢失精度
//等价于int temp = val3
//const int& ref4 = temp;
cout<<"ref4="<<ref4<<endl;
cout<<"val3="<<val3<<endl;
// int& ref5 = val3; // error C2440: “初始化”: 无法从“double”转换为“int &”
return 0;
}
3.引用作为参数传递
#include <iostream>
using namespace std;
//引用作为参数传递
void swap(int& x, int& y)
{
int temp = x;
x =y;
y = temp;
}
int main(void)
{
int a = 5;
int b = 6;
swap(a, b); //在函数调用时,引用被初始化x = a, y = b;
cout<<"a="<<a<<" b="<<b<<endl;
return 0;
}
4.引用作为函数返回值
#include <iostream>
using namespace std;
//引用作为函数返回值
//注意:不能返回对局部变量的引用
int a[] = {0,1,2,3,4};
int& index(int i)
{
return a[i];
}
int main(void)
{
index(3) = 100; //引用作为函数返回值,使得函数可以放在赋值运算符左边
//函数返回引用,引用在函数返回的时候初始化
//index(3)在函数返回的时候被初始化a[3]
cout<<"a[3]="<<a[3]<<endl;
return 0;
}