类型名 &引用名 = 同类型的某变量名;
此种写法就定义了一个某种类型的引用,并将其初始化为引用某个同类型的变量。“引用名”的命名规则和普通变量相同。例如:int n; int & r = n;r 就是一个引用,也可以说 r 的类型是 int &。第二条语句使得 r 引用了变量 n,也可以说 r 成为了 n 的引用。
#include <iostream>
using namespace std;
int main()
{
int n = 4;
int & r = n; //r引用了n,从此r和n是一回事
r = 4; //修改r就是修改n
cout << r << endl; //输出4
cout << n << endl; //输出4
n = 5; //修改n就是修改r
cout << r << endl; //输出 5
int & r2 = r; //r2和r引用同一个变量,就是n
cout << r2 << endl; //输出 5
return 0;
}
#include <iostream>
using namespace std;
int n = 4;
int & SetValue()
{
return n; //返回对n的引用
}
int main()
{
SetValue() = 40; //返回值是引用的函数调用表达式,可以作为左值使用
cout << n << endl; //输出40
int & r = SetValue();
cout << r << endl; //输出40
return 0;
}
SetValue 函数的返回值是一个引用,是 int & 类型的。因此第 6 行使得其返回值成为变量 n 的引用。
#include <iostream>
using namespace std;
void Swap(int a, int b)
{
int tmp;
//以下三行将a、b值互换
tmp = a;
a = b;
b = tmp;
cout << "In Swap: a = " << a << " b = " << b << endl;
}
int main()
{
int a = 4, b = 5;
Swap(a, b);
cout << "After swaping: a = " << a << " b = " << b << endl;
return 0;
}
在上面的程序中,Swap 函数的返回值类型是 void,因此函数体内可以不写 return 语句。 在不写 return 语句的情况下,函数执行到末尾的}才返回。
#include<iostream>
using namespace std;
void Swap(int & a, int & b)
{ //交换a、b的值
int tmp;
tmp = a; a = b; b = tmp;
}
int main()
{
int n1 = 100, n2 = 50;
Swap(n1, n2); //n1、n2 的值被交换
cout << n1 << " " << n2 << endl; //输出 50 100
}
第 11 行,进入 Swap 函数后,a 引用了 n1,b 引用了 n2,a、b 值的改变会导致 n1、n2 值的改变。因此本行会使 n1 和 n2 的值交换。
int n; const int & r = n;上面的语句定义了常引用 r,其类型是 const int &。
int n = 100; const int & r = n; r = 200; //编译出错,不能通过常引用修改其引用的内容 n = 300; //没问题,n的值变为300注意,const T& 和 T& 是不同的类型。T& 类型的引用或 T 类型的变量可以用来初始化 const T & 类型的引用,const T 类型的常变量和 const T & 类型的引用则不能用来初始化 T & 类型的引用,除非进行强制类型转换。例如下面的程序:
void Func(char & r) { }
void Func2(const char & r) { }
int main()
{
const char cc = 'a';
char c;
const char & rcl = cc;
const char & rc2 = c; //char变量可以用来初始化 const char & 的引用
char & r = cc; //编译出错,const char 类型的常变量不能用来初始化 char & 类型的引用
char & r2 = (char &)cc; //没问题,强制类型转换
Func(rcl); //编译出错,参数类型不匹配
Func2(rcl); //没问题,参数类型匹配
return 0;
}
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有