- 下面的写法定义了一个引用,并将其初始化为引用某个变量。
类型名 & 引用名 = 某变量名;
int n = 4;
int &r = n;//r 引用了 n,r 的类型是 int&
- 某个变量的应用,等价于这个变量,相当于该变量的一个别名。
- For example
int n = 7;
int & r = n;
r = 4;
cout << r;//输出 4
cout << n;//输出 4
n = 5;
cout << r; //输出5
注意:
- 定义引用时一定要将其初始化成引用某个变量
- 初始化之后,它一直引用该变量,不会再引用别的变量了。
- 引用只能引用变量,不能引用常量和表达式。
- For example
double a = 4,b = 5;
double & r1 = a;
double r2 = r1;
r2 = 10;
cout<<a <<endl;//10
r1 = b;
cout<<a <<endl;//5
交换两个整形变量值的函数
//C 语言中的写法,使用指针,写法比较丑陋
void swap(int *a,int *b){
int tmp;
tmp = *a;*a = *b;*b = tmp;
}
int n1,n2;
swap(&n1,&n2);
//C++,使用引用,比较清晰
void swap(int&a,int&b){
int tmp;
tmp = a;a= b;b = tmp;
}
int n1,n2;
swap(n1,n2);
引用作为函数的返回值
int n = 4;
int & SetValue(){return n;}
int main()
{
SetValue() = 40;
cout<<n;
return 0 ;
}//返回一个全局变量 n 的引用,对这个引用进行新的赋值为40,那么打印结果就是40.
常引用
- 定义引用时,前面加 const 关键字,即为“常引用”
int n ;
const int & r = n;
r 的类型是 const int &
不能通过常引用去修改其应用的内容
int n =100;
const int & r = n;
r = 200;//报错(常引用的内容不能被修改,但是不意味着常引用的内容不能被修改。)
n = 300;//没问题
常引用和非常引用的转换
count T &和 T&是不同的类型!!!
- T & 类型的引用或者 T 类型的变量可以用来初始化 const T & 类型的引用。
- count T 类型的常变量和 const T & 类型的引用则不能用来初始化 T & 类型的引用,除非进行强制类型转换。