首页 > 代码库 > 引用类型到底是怎么回事?

引用类型到底是怎么回事?

 相信使用c++的朋友们对引用类型不会陌生的, 不过, 大家是否觉得指针似乎更重要呢? 引用能做的, 指针不是同样可以完成么? 而且功能更加强大, 使用方式也更加灵活啊.  那么引用到底是怎么搞的呢?  c++之父: 本贾尼·斯特劳斯特卢普博士当年为什么非要创造引用类型呢?  难道不是只有指针才是亲儿子?

        首先, 我们来对比一下引用类型和指针类型的区别:
        1. 引用类型不可以是null,  但指针可以
        2. 引用的实现必须基于当前可用的变量, 它们仅仅是已有变量的别名而已. 它们无法独立存活. 引用类型犹如生化病毒, 离开了宿主,它们将无法独自存活. 而指针类型就不同了, 它们本身就是一种独立的数据类型, 你可以像int类型一样,自由地创造并使用它们.  
        3. 引用类型永远和变量绑定在一起, 禁止更换其宿主. 而指针有多大的自由度, 呵呵, 我想你懂的. 
        4. 引用类型禁止相互赋值, 而指针随便你怎么搞. 只有想不到的, 没有做不出的.   
        5. 引用类型本身的地址是无法得到的,  你无法查看引用类型本身的地址, 你能查看到的永远是引用类型所引用的那个变量的地址. 但是指针就可以, 指针本身的的地址可以轻松被显示出来.
 
        其次, 我们来看一下java.
        不知道大家对java的引用类型是怎么看的, 看起来是否和c++是一样的呢? 表面看起来貌似是如此啊. 然而实际上呢?
        了解java的都知道, 其内存模型比c++简单了许多.  java中的对象只能放在堆里面. 而且你想访问对象, 只能使用指针. 你也许会问, java哪来的指针呢? 我想对java有一定理解的人都明白, 对不对. 其实就是java中的引用类型. 只不过詹姆斯高斯林和他的小伙伴们把java的指针换了个名称, 就变成了引用. 名字不同而已.  
         java只能通过指针访问对象的这一特点, 也促使其访问对象时在语法上可以省略" * " 号, 也就是java中引用类型. 
        所以, java的引用类型和c++的引用类型是不一样的, 从本质上来讲, c++有引用和指针, 而java只有指针. 最明显的例子是, 在c++中, 引用类型之间禁止赋值, 但是你会发现在java中你可以这么干. 其根本原因就在这儿了.
        java为了安全起见, 取消了对指针进行运算的功能, 而c++当然可以对指针进行诸如自增自减,自由移动等等运算. c++自由度高的代价就是不够安全, 因为指针的移动一旦失去控制, 就会出现野指针.  所以假如你使用c++, 你就必须强迫自己成为一名高手, 而不是只停留于使用语言本身.  c++对程序员的水平要求更高, 它是一把锋利无匹的宝剑, 就看你能不能够驾驭的了了. 见仁见智.
       在这里还要讲的一点是, 不要总是拿语言之间进行比较, 没任何必要. 实际上在开发一般的软件功能上, c++能做的, java都能做, 而java做不到的那些, 也是因为c++中c语言的那些功能. 而不是简单就因为c++而已. 希望大家能搞清楚.

 

引用类型到底是怎么回事?