條款03 盡可能使用const

2021-10-09 01:33:47 字數 1005 閱讀 5927

總結關鍵字const出現在星號左邊,表示被指物是常量;如果出現在出現在星號右邊,表示指標自身是常量;如果出現在星號兩邊,表示被指物和指標兩者都是常量。

const

char

* p =

"greeting"

;//指標所指物為常量

char

*const p =

"greeting"

;//指標是常量

stl迭代器是以指標為根據塑模出來的,所有迭代器的作用就像個t*指標。宣告迭代器為const就像宣告指標為const一樣(即宣告乙個t* const指標),表明迭代器不能指向不同的東西,但所指東西可以改動。如果想讓迭代器所指的東西不可被改動(模擬const t*指標),需要const_iterator。

vector<

int> vec;

const vector<

int>

::iterator iter = vec.

begin()

;vector<

int>

::const_iterator citer = vec.

begin()

;

const成員函式分成了兩個陣營:bitwise constness和logical constness。

bitwise constness

成員函式只有在不更改物件之任何成員變數(static除外)時才可以說是const。bitwise constness正是c++對常量性(constness)的定義,因而const成員函式不可以更改物件內任何non-static成員變數。

logical constness

乙個const成員函式可以修改它所處理的物件內的某些bits,但是編譯器堅持bitwise constness。

解決方法:利用c++的乙個與const相關的擺動場:mutable(可變的)。mutable釋放掉non-static成員變數的bitwise constness約束。

條款03 盡可能使用const

use const whenever possible.stl迭代器是根據指標塑模出來的,所以迭代器的作用就像個t 指標。宣告迭代器為const就像宣告指標為const一樣,表示這個迭代器不能指向不同的東西,但它所指的東西的值是可以改變的。如果你希望迭代器所指的東西不可被改動,你需要的是const ...

條款03 盡可能使用const

被指物是常量時,const寫在型別前或型別後都行 const widget buf widget const buf stl迭代器是以指標為根據塑模出來,所以迭代器的作用就像個t 指標。std vectorv const std vector iterator it v.begin it 10 正確...

條款03 盡可能使用const

1 為什麼盡可能使用const?const指定語義約束,即某個物件不應該被改變,並且編譯器會強制執行這條約束。如果某個物件確實不應該被改變,那麼我們就應該將其生命為const,這樣一來,如果違背了這個約束,編譯器將幫助我們檢測出來。2 界定常量指標和指向常量的指標 const type pt 1 t...