03 盡可能使用 const

2021-10-18 05:05:08 字數 1340 閱讀 2852

char greeting = "hello";

char *p = greeting; //non-const pointer, non-const data

const char *p = greeting; //non-const pointer, const data

char* const p = greeting; //const pointer, non-const data

const char* const p = greeting; //const pointer, const data

如果關鍵字 const 出現在星號左邊,表示被指物是常量;但是指標可以指其它的。

如果關鍵字 const 出現在星號右邊,表示指標自身是常量;此時指標不能再被賦值。

如果出現在星號兩邊,表示被指物和指標兩者都是常量;

如果希望被指物是常量:const可以寫在型別前,也可以寫在型別後。(以 * 劃分,而不是型別)

//f1和f2獲得乙個指標,指向乙個常量的(不變的)widget物件

void f1( const widget* aa);

void f2( widget const *aa);

​ 宣告迭代器為const就像宣告指標為const一樣( t* const指標),這樣的話這個迭代器不得指向不同的東西,但它指的那個東西的值是可以改動的。

const vector::iterator p = aa.begin();

*p = 10; //可以賦值

++p; //錯誤,因為p 是const

​ 若希望這個迭代器指的東西可以改動,但是它指的東西的值不可以改動:

vector::const_iterator p = aa.begin();

*p = 10; //錯誤, *p是乙個 const

++p; //可以

​ 令函式返回乙個常量值,往往可以降低因使用者錯誤而造成的意外,而又不至於放棄安全性和高效性。(因為 const 不能賦值)

const int aaa (const int &a, const int &b)

//使用者可能在 a+b==c 上面漏寫乙個 = ,就會報錯。

const int aaa (const int &a, const int &b)

對付 const的話,可以用 mutable來對付。被 mutable修飾的變數將永遠處於可變狀態。

03 盡可能使用const

1.const出現在星號左邊,表示被指物是常量 如果出現在星號右邊,表示指標自身是常量 如果出現在星號兩邊,表示被指物和指標兩者都是常量 voidf1 const int ip voidf2 intconst p 這兩個函式接受的引數型別一樣,都表示乙個指向常量的指標2.令函式返回乙個常量值 cla...

條款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 正確...