信息前沿C++ 引用的本质是什么?

Posted 工大人文信息工程系

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信息前沿C++ 引用的本质是什么?相关的知识,希望对你有一定的参考价值。



代码运行环境:

Windows7 32bits+VS2017+Win32。

引用是C++引入的重要机制,它使原来在C中必须用指针实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么关系呢?



1、引用的底层实现方式


引用被称为变量的别名,它不能脱离被引用对象独立存在,这是在高级语言层面的概念和理解,并未揭示引用的实现方式。常见错误说法是“引用“自身不是一个变量,甚至编译器可以不为引用分配空间。




2.高级语言层面引用与指针常量的关系


(3)凡是使用了引用变量的代码,都可以转换成使用指针常量的对应形式的代码,只不过书写形式上要繁琐一些。反过来,由于对引用变量使用方式上的限制,使用指针常量能够实现的功能,却不一定能够用引用来实现。

例如,下面的代码是合法的:【信息前沿】C++ 引用的本质是什么?    而如下代码是非法的:【信息前沿】C++ 引用的本质是什么?    也就是说,数组元素允许是指针常量,却不允许是引用。C++语言机制如此规定,原因是避免C++语法变得过于晦涩。假如定义一个“引用的数组”,那么array[0]=8;这条语句该如何理解?是将数组元素array[0]本身的值变成8呢,还是将array[0]所引用的对象的值变成8呢?对于程序员来说,这种解释上的二义性对正确编程是一种严重的威胁,毕竟程序员在编写程序的时候,不可能每次使用数组时都要回过头去检查数组的原始定义。




3、非正常使用引用变量指向别的变量


C++语言规定,引用变量在定义的时候就必须初始化,也即是将引用变量与被引用对象进行绑定。而这种引用关系一旦确定就不允许改变,直到引用变量结束其生命期。这种规定是在高级语言的层面上,由C++语言和编译器所做的检查来保障实施的。在特定的环境下,利用特殊的手段,还是可以在运行时动态地改变一个引用变量与被引用对象的对应关系,使引用变量指向一个别的对象。见下面的程序:

【信息前沿】C++ 引用的本质是什么?

这个程序在Debug模式下输出结果如下:

【信息前沿】C++ 引用的本质是什么?

仔细观察代码和输出结果可以得出如下结论:



END

来源:CPP编程指北

编辑:高昕宇、陈静宇

责编:韩磊

审核:王增宝

以上是关于信息前沿C++ 引用的本质是什么?的主要内容,如果未能解决你的问题,请参考以下文章

C++引用在本质上是什么,它和指针到底有什么区别?

C++中引用和匿名对象的理解和本质剖析

C++ 引用本质的理解①

值传递,指针传递;引用传递(c++独有)本质

引用的本质分析

前沿研究李国杰院士:关于人工智能本质和价值的13个判断