const 常量_条款03:尽可能使用const
1、const指針
如果關鍵字const出現在星號左邊,表示被指物是常量;如果出現在星號右邊,表示指針自身是常量;如果出現在星號兩邊,表示被指物和指針兩者都是常量。
關鍵字const出現在類型前后類型后星號前,意義都是相同的,表示被指物是常量。例:int const * a 等價于 const int *a
STL中的迭代器以指針為根據塑造出來的,所以迭代器的作用就相當于T*指針。聲明迭代器為const就像聲明指針為const一樣(即聲明一個T* const 指針),表示這個迭代器不能指向別的不同的東西,但他所指的值是可以改變的。如果你希望迭代器所指的東西不可被改動(即希望STL模擬一個const T*指針),這時候就需要的是const_iterator。兩種格式:
const std::vector<int>::iterator
std::vector<int>::const_iterator
2、const 成員函數
將const 實施于成員函數的目的,是為了確認該成員函數可作用于const對象身上。1、const成員函數的接口比較容易被理解,可以得知哪個函數可以改動對象,哪個函數不可以改動對象
2、是操縱 const 對象成為可能
兩個成員函數如果只是常量性(constness)不同,可以被重載。
3、兩個陣營:bitwise constness 和 logical constness
bitwise const陣營相信:成員函數只要在不更改對象的任何成員變量(static 除外)是才可以說是const。也就是說它不更改對象內的任何一個bit。
const成員雖然保證了成員變量值不會被改變,但是如果這個變量是指針或者引用,那么可以通過這個指針或引用去改變被指物。隨便改變了值,但依然可以通過編譯器編譯。這里面雖然是滿足了bitwise const
logical constness 陣營不主張:一個const成員函數可以修改它所處理的對象內的某些bits,但只有在客戶端偵測不出的情況才可如此(沒理解啥意思)
const成員函數中想要修改成員變量的話,在聲明變量的時候在前面加上mutable即可。4、在const 和 non-const 成員函數中避免重復
假若const 重載 non-const函數,但是其中的操作都是一樣的,那么就會造成代碼重復。可以讓non-cosnt 函數去調用const函數。不過在調用過程中需要經過兩次轉型,1、將non-const的this指針轉換為const指針2、將返回值得const去掉
請記住:
- 將某些東西聲明為 const 可幫助編譯器偵測出錯誤用法。 const 可被施加于任何作用域內的對象、函數參數、函數返回類型、成員函數本體。
- 編譯器強制實施bitwise constness,但你編寫程序時應該使用“概念上的常量性”(conceptual constness)
- 當const 和 non-const成員函數有著實質等價的實現時,令non-const版本調用const版本可避免代碼重復
本文主要內容來自于侯捷老師譯的《Effective C++》,大力推薦感興趣的同學可以去購買。也歡迎大家交流!
總結
以上是生活随笔為你收集整理的const 常量_条款03:尽可能使用const的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习记录1——vissim4.3安装和v
- 下一篇: 二分算法和冒泡排序时间复杂度分析