亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++ this指針的目的是什么?

c++ this指針的目的是什么?

C++
海綿寶寶撒 2018-07-29 17:17:43
查看完整描述

2 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

哎,這些東西如果一說就復雜了。

是這樣的,其實不管C語言還是C++語言,最后編譯成機器碼并沒有什么本質的區別,所謂類,雖然在語言這個層面有了一個概念性的解釋(相同屬性相同操作的集合的抽象化),但是實際上在二進制的表示和結構上沒有什么本質的區別,都是一個內存區域保存了一些值。那這樣一來,就可能使得程序員跨過一個類的限制(比如應該只能訪問自己的成員,但是你想辦法訪問了其他對象的成員)。

所以C++在設計的時候就隱含了一個this指針,這個指針主要是用于保證你的訪問不能跨界和用于區分不同的對象。舉個例子,你的任何一個函數的申明實際隱含了一個this指針參數,這個參數你不可見,也不可編輯,是編譯器自動添加上去的,為什么要這樣?實際上對象在實例化的時候,體積是非常小的,并沒有每一個對象都保存函數,同一個類的對象的函數實際上只有一份副本(二進制層面),那如何來區分到底是誰調用了函數?就是這個this指針。

this指針實際是指向了對象的內存地址起始值,所以通過一個偏移量,就知道了對象的各種屬性(變量),也就確定了一個絕對的對象。當然在對象的函數操作里我們可以顯示的用this->的方式來引用變量,但是你也發現你即使不加上this指針,它依然知道你引用了誰,其實就是隱含了一個參數this指針。

為了進一步理解,想一下static修飾的函數有什么區別,為什么static函數只能訪問static修飾的屬性?因為static修飾的函數就沒有傳遞這個this指針,所以它不知道你指的是哪一個對象。而實際上,static修飾的符號就和C語言的全局變量和函數無區別了。

查看完整回答
反對 回復 2018-08-03
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

一個對象的this指針并不是對象本身的一部分,不會影響sizeof(對象)的結果。this作用域是在類內部,當在類的非靜態成員函數中訪問類的非靜態成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也是加上this的,它作為非靜態成員函數的隱含形參,對各成員的訪問均通過this進行。

例如,調用date.SetMonth(9) <===> SetMonth(&date, 9),this幫助完成了這一轉換 .

查看完整回答
反對 回復 2018-08-03
  • 2 回答
  • 0 關注
  • 1304 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號