龙空技术网

C++学习目标:最简单实用的引用类型介绍

小止学编程 86

前言:

此刻小伙伴们对“引用变量有哪三种类型的”大体比较重视,咱们都需要剖析一些“引用变量有哪三种类型的”的相关内容。那么小编也在网络上网罗了一些对于“引用变量有哪三种类型的””的相关资讯,希望姐妹们能喜欢,我们快快来学习一下吧!

引用(reference)类型可以理解为别名,对一个变量的引用进行操作,和对一个变量直接操作并无差别。

引用由类型标识符和一个取地址操作符(&)来定义(注意,&和变量名之间可以有空格),如:

int nValue = 123;

int &rnValue = nValue;

与指针类型相比(可参考《最简单实用的指针类型介绍》),引用的定义有一些特殊要求:

(1)引用变量需要在定义时被初始化,如:

int &rnValue; //VS2010编译器报错:error C2530: “rnValue”: 必须初始化引用

(2)不存在空引用,如:

int &rnValue = 0;//VS2010编译器报错:error C2440: “初始化”: 无法从“int”转换为“int &”

(3)一旦引用变量已经被定义,它就不能再指向其他的对象,如:

int nValue = 123;

int &rnValue = nValue;

int nValue2 = 456;

rnValue = nValue2;//编译器不报错,但不会改变rnValue的引用指向,且会导致nValue被赋值为456,与预期意图不符

既然引用有这么多限制,那它的好处是什么?答案是这些限制其实就是它的好处。

下面将引用和指针放一起比较,然后针对引用的特性反向理解引用类型的好处:

(1)指针地址被篡改后,会指向非预期的对象。而引用本身不会被篡改指向。这样调试过程中就不用监视指针地址是否变化了。

(2)空指针解引用会导致程序崩溃,使用时经常需要对空指针进行防护。而引用不存在空引用,避免了该错误,减少了防护代码。

(3)指针被传递后,经常要检查是否被篡改。而引用肯定指向的是原先的对象。

在面向对象编程里,如果严格要求编码规范,再合理使用设计模式,完全可以将指针类型全部用引用类型代替。一个实用的建议:请尽量使用引用,而不是指针。

结合VS2010库代码看看引用类型的用法。如STL库文件“map”方框处的引用类型:

MFC库文件“winctrl2.cpp”方框处的引用类型:

总体而言,引用使用起来比指针更安全好用。

学习目标“最简单实用的引用类型介绍”已完成[再见]

标签: #引用变量有哪三种类型的