c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...
首先分兩大陣營:C++中引用是一塊陣營,
C#、Java、Javascript、Python中引用是另一塊陣營。
之所以這樣分是因為同一陣營中引用使用方法基本一樣。
C++引用本質是個常量指針,而其他語言引用本質是個普通指針。也就意味著C++的引用一旦初始化(指向確定了),以后就不可再修改(不可再指向其他對象),而其他語言的引用可以隨時修改指向。
具體區別:(先聲明下面所說的賦值是指“=”)
一個變量使用無非就兩種情況,讀取變量的內容和給變量賦值。兩大陣營中只有在讀取引用時行為都一樣,在給引用賦值時行為不一樣。
讀取引用時:都是對引用進行“解引用”,結果是讀取了引用指向的實際變量的值。
給引用賦值時:C++依然進行“解引用”,所以C++中碰到給引用賦值的語句時,本質是給引用指向的變量賦值;而在其他語言中不進行“解引用”,本質是給引用這個指針賦值。
正因為C++引用在讀取和賦值時表現都一樣(都是解引用),所以很多書上說引用就是變量的別名,因為任何時候使用引用(不管是賦值還是取值)都是使用引向的變量,故而引用表現的就好像變量的別名一樣(但要認清本質,千萬不要認為引用不占內存空間,實際上他是個指針也占內存空間的)。
但是在其他語言中引用就是指針,不是變量的別名,因為給引用賦值時沒有自動解引用,就是給指針賦值(操作的是指針,不再是變量了,所以不能稱之為別名);取引用的值時會自動解引用,就是取得引向的變量的值。(你可以稱之為“半個別名”)
那么問題來了,在其他語言中,怎么給引用引向的變量賦值呢(第二次以上的賦值,第一次是變量自己的構造函數自動賦值)?
答:只能通過copy函數,不同語言都有對copy函數的不同實現。注意copy和構造函數不一樣,構造函數是給還不存在的變量賦值,也就是建立變量并給變量第一次賦值;而copy函數是給已經存在的變量賦第二次以上的值。
最后補充一下,C++、C#、Java中的引用是有類型的,也就是說指針是有類型的,不可隨意更改這個引用(指針)的類型;而在Javascript、Python等腳步語言中,引用是沒有類型的,也就是說指針是沒有類型的,可以隨意更改引用(指針)的類型,也即引用是“無類型的”,可以隨意指向任何數據類型。
總結
以上是生活随笔為你收集整理的c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑系统驱动检测软件(自动检测电脑驱动程
- 下一篇: java音乐登陆界面_第四篇——Spri