C++中mutable的用法和存在意义
1. mutable的主要用法:讓類中的const函數能夠修改類內值
小例子:github
2. mutable存在的意義
有人會說,既然是在const函數中修改的,那我把函數中的const去掉不就可以了嗎?還要mutable干什么?
以下摘取一些知乎的回答:
const意思是“這個函數不修改對象內部狀態”。
為了保證這一點,編譯器也會主動替你檢查,確保你沒有修改對象成員變量——否則內部狀態就變了。
mutable意思是“這個成員變量不算對象內部狀態”。比如,你搞了個變量,用來統計某個對象的訪問次數(比如供debug用)。它變成什么顯然并不影響對象功用,但編譯器并不知道:它仍然會阻止一個聲明為const的函數修改這個變量。
把這個計數變量聲明為mutable,編譯器就明白了:這個變量不算對象內部狀態,修改它并不影響const語義,所以就不需要禁止const函數修改它了。
作者:invalid s
鏈接:https://www.zhihu.com/question/64969053/answer/226142449 來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
然后的話,從stl的角度看:
方便接口和實現更好的取舍啊!
要知道 const 對象不能直接調用非const 函數的。 在已有const 接口的條件下,你不得不修改某些類成員的時候你怎么辦? 修改接口? 會不會破壞已有的代碼?那些認為 const 本身多余的誰給解釋下?Rust 默認是const 的,所以不需要const 關鍵字?
作者:昭然
鏈接:https://www.zhihu.com/question/64969053/answer/226586086
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
還有:
有些時候為了寫兼容STL的類,就不得不用mutable關鍵字。STL里面有很多函數參數是const的,函數內部只能調用該對象的const函數,這時如果對象內部的某些變量需要改動就需要該關鍵字。舉個例子,iterator頭文件里面的istreambuf_iterator類的重載解引用(*)運算符函數是const的,內部修改了一個mutable變量。該函數是const的原因就是為了與輸入迭代器的接口一致。
作者:monkey
鏈接:https://www.zhihu.com/question/64969053/answer/226664374
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
因此,mutable存在是有其意義的。
總結
以上是生活随笔為你收集整理的C++中mutable的用法和存在意义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当初的愿望实现了吗?
- 下一篇: qq游戏英雄杀怎么老是显示计算机,qq英