日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

const 常量_条款03:尽可能使用const

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 const 常量_条款03:尽可能使用const 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。