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

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

為什么“ this”是指針而不是引用?

為什么“ this”是指針而不是引用?

C++
蝴蝶刀刀 2019-12-11 09:09:24
我在閱讀有關C ++優缺點的問題的答案,并在閱讀注釋時遇到了疑問。程序員經常發現“ this”是一個指針而不是一個引用令人困惑。另一個困惑是為什么“ hello”不是std :: string類型,而是求值為char const *(指針)(在數組到指針的轉換之后)– Johannes Schaub-litb 08年12月22日在1:56那僅表明它沒有使用與其他(后來的)語言相同的約定。– le dorfier 08年12月22日在3:35不過,我將“這個”問題稱為一個瑣碎的問題。糟糕,感謝您在我的未定義行為示例中發現了一些錯誤。:)盡管我不了解有關尺寸的信息與第一個信息有關。完全不允許指針指向已分配的內存之外– jalf 08年12月22日在4:18這是持續不斷的痛苦嗎?– yesraaj 08年12月22日下午6:35如果方法是const int getFoo()const,則它可以是常量。<-在getFoo的范圍內,“ this”是常量,因此是只讀的。這樣可以防止錯誤,并為調用者提供一定程度的保證,即該對象不會更改。– Doug T. 08年12月22日在16:42您不能重新分配“此”。即您不能執行“ this =&other;”,因為這是一個右值。但這是T *類型,而不是T const類型。即它是一個非恒定指針。如果您使用的是const方法,則它是指向const的指針。T常量 但指針本身是非常量– Johannes Schaub-litb 08年12月22日在17:53像這樣思考“ this”:#define this(this_ + 0),其中編譯器創建“ this_”作為指向對象的指針,并使“ this”成為關鍵字。您不能分配“ this”,因為(this_ + 0)是一個右值。當然不是這樣的(沒有這樣的宏),但是它可以幫助理解它– Johannes Schaub-litb 08年12月22日在17:55我的問題是,為什么this指針不是引用?使其成為指針有任何特殊原因嗎?為什么this要成為引用會更有意義:考慮Item 1來自More Effective C++:使用引用時,可以保證我們有一個有效的對象,即不是一個NULL(我的解釋)。此外,引用被認為比指針更安全(因為我們無法使用流浪指針來破壞內存)。第三,訪問引用(.)的語法比訪問指針(->或(*))更好一些,也更短。
查看完整描述

3 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

當該語言第一次發展時,在具有實際用戶的早期版本中,沒有引用,只有指針。添加操作員重載時添加了引用,因為它需要引用才能一致地工作。

的用途之一this是使對象獲得指向自身的指針。如果是參考,我們必須寫&this。另一方面,當我們編寫一個賦值運算符時,我們必須這樣做return *this,它看起來更簡單return this。因此,如果您的菜板空白,則可以選擇其中任何一種方式。但是C ++逐漸發展以響應用戶社區的反饋(例如最成功的事物)。向后兼容性的價值完全壓倒了由于this作為參考或指針而產生的次要優點/缺點。



查看完整回答
反對 回復 2019-12-12
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

因為在添加引用之前,“ this”已引入C ++(實際上是帶有類的C)。另外,我選擇“ this”來遵循Simula的用法,而不是(后來的)Smalltalk對“ self”的用法。



查看完整回答
反對 回復 2019-12-12
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

C ++標準指出


9.3.2 / 1


在非靜態(9.3)成員函數的主體中,關鍵字this是一個非左值表達式,其值是為其調用該函數的對象的地址。在類X的成員函數中,此類型為X *。如果將成員函數聲明為const,則其類型為const X *;如果將成員函數聲明為volatile,則其類型為volatile X *;如果將成員函數聲明為const volatile,則其類型為const。易失X *。


但是在其他參考文獻中,發現了其他東西。于是有人主動出擊并給斯特勞斯特魯普先生發了郵件。隨后的對話可以在這里找到。



查看完整回答
反對 回復 2019-12-12
  • 3 回答
  • 0 關注
  • 542 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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