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

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

成員函數結束時const的含義是什么?

成員函數結束時const的含義是什么?

C++
慕絲7291255 2019-08-27 15:50:07
成員函數結束時const的含義是什么?const當C ++ 中的關鍵字在成員函數的末尾(在參數列表之后)寫入時,它到底意味著什么呢?
查看完整描述

3 回答

?
蕪湖不蕪

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

這意味著,*thisconst該成員函數的內部,即,它不改變的對象。

關鍵字this是一個prvalue表達式,其值是調用該函數的對象的地址。類的this成員函數的類型XX*。如果聲明了成員函數const,則類型thisconst X*。[第9.3.2節§1]

const成員函數中,通過const訪問路徑訪問調用函數的對象; 因此,const成員函數不得修改對象及其非靜態數據成員。[第9.3.2節§2]

這意味著const可以const在類的實例上調用成員函數。阿非const成員函數不能被稱為上[1]一個const對象,因為它可能嘗試修改它。

[1]注意:臨時不是const對象,除非它是const類型。


查看完整回答
反對 回復 2019-08-27
?
慕俠2389804

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

const在函數簽名的末尾意味著函數應該假定它所屬的對象是const。實際上,它意味著您要求編譯器檢查成員函數是否以任何方式更改對象數據。這意味著要求編譯器檢查它是否不直接更改任何成員數據,并且它不會調用任何本身不保證它不會更改對象的函數。

在創建const對象時,您要求編譯器確保該對象在初始化之后不會更改。這反過來意味著編譯器將檢查您是否不直接更改其成員數據,并且您不會調用任何不保證它不會更改對象的函數。

這是const正確性哲學的一部分。從本質上講,這意味著如果事情現在正常發揮并且它們不會改變那么它們就永遠不會破裂。換句話說,不斷的事物更容易可靠地工作。const函數簽名末尾的這個東西是一個禁止破壞事物的工具。這反過來意味著你應該放在const你可能的任何地方。


查看完整回答
反對 回復 2019-08-27
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

編譯器優化是可能的,但主要的好處是強制執行函數聲明中表示的契約 - 如果將成員函數定義為const,則編譯器會阻止對該函數內對象的任何修改。

您可以mutable在聲明中使用此限制來豁免類中的各個字段。這很有用,例如當你有一個封裝了自己的lock_guard的類時,即使在const成員函數中也必須更改其值以強制執行線程安全。


查看完整回答
反對 回復 2019-08-27
  • 3 回答
  • 0 關注
  • 635 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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