第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

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

2 回答

?
莫回無

TA貢獻1865條經(jīng)驗 獲得超7個贊

哎,這些東西如果一說就復(fù)雜了。

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

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

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

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

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

TA貢獻1811條經(jīng)驗 獲得超4個贊

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

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

查看完整回答
反對 回復(fù) 2018-08-03
  • 2 回答
  • 0 關(guān)注
  • 1314 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號