C++学习——”引用“的概念和应用

“引用”的概念与应用


中国大学慕课——程序设计算法:c++面向对象程序设计(https://www.icourse163.org/learn/PKU-1002029030?tid=1450432459#/learn/content?type=detail&id=1214925543

“引用”的定义:

  类型名&引用名=某变量名;

int n = 4;
int & r = n;// r 引用了 n , r 的类型是 int&
某个变量的引用,等价于这个变量,相当于该变量的一个别名。 

int n = 7;
int & r = n;
r = 4;
cout<<r;//输出 4
cout<<n;//输出 4
n = 5;
cout<<r;//输出 5

 定义引用时一定要将其初始化成引用某个变量。 

 初始化后,它就一直引用该变量不会再引用别的变量了。 

 引用只能引用变量,不能引用常量和表达式。

double a = 4,b = 5;
double & r1 = a;
double & r2 = r1;//r2也引用 a
r2 = 10;
cout <<a<<endl;//输出 10
r1 = b;     //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);//n1,n2的值不被交换

在上述代码之中,n1 和n2 的值并不会被改变。

因为a , b 仅仅是作为形参的值存在于函数中,形参的改变并不会引起实参的改变。

于是,我们便将代码修改如下:

void swap(int *a, int *b)
{
        int tmp;
        tmp = * a; * a = * b; * b = tmp;
}
int n1, n2;
swap(& n1, & n2);
//n1,n2的值被交换
 

上述代码参与交换的就不是n1与n2了,而是n1与n2的地址。函数的参数变成了指针,函数对指针的所指的内容进行了交换。

但是在学习了C++的引用之后,我们的代码可以改成:

void swap(int & a,int & b)
{
        int tmp;
        tmp = a; a = b; b = tmp;
}
int n1, n2;
swap(n1,n2);//n1 ,n2的值被交换

a引用了n1。

b引用了n2。

所以当 a 和 b 的值发生改变时,也会影响到 n1 , n2 。

引用作为函数的返回值:

int n = 4;//n 为全局变量
int & SetValue() { return n;}//函数的返回值类型为 int&
int main()
{
        SetValue() = 40;//对函数赋值也就相当于对n赋值
        cout<<n;
        return 0;
}//输出:40

常引用:

定义引用时,前面加上const关键字,即为“常引用”

int n;
const int & r = n;

r 的类型是 const int &

特点:不能通过常引用去修改其引用的内容。

int n = 100;
const int & r = n;
r = 200;//编译出错
n = 300;//正确

常引用和非常引用的转换:

const T &T & 是不同的类型!

T & 类型的引用或 T 类型的变量可以用来初始化 const T & 类型的引用。

const T类型的常变量 和const T &类型的引用则不能用来初始化T &类型的引用,除非强制类型转换。

总之 加了 const 的常变量不能用来初始化没加 const 的。

猜你喜欢

转载自www.cnblogs.com/A-1desmallTao/p/12349706.html