一、const基礎
如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況:
intb = 500;
const int
* a = &b; [1]
intconst *a = &b; [2]
int* const a = &b; [3]
const int
* const a = &b; [4]
如果你能區分出上述四種情況,那麼,恭喜你,你已經邁出了可喜的一步。不知道,也沒關係,我們可以參考《effective c++》item21上的做法,如果const位於星號的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;如果const位於星號的右側,const就是修飾指標本身,即指標本身是常量。因此,[1]和[2]的情況相同,都是指標所指向的內容為常量(const放在變數宣告符的位置無關),這種情況下不允許對內容進行更改操作,如不能*a = 3 ;[3]為指標本身是常量,而指標所指向的內容不是常量,這種情況下不能對指標本身進行更改操作,如a++是錯誤的;[4]為指標本身和指向的內容均為常量。
另外const 的一些強大的功能在於它在函式宣告中的應用。在乙個函式宣告中,const 可以修飾函式的返回值,或某個引數;對於成員函式,還可以修飾是整個函式。有如下幾種情況,以下會逐漸的說明用法:
a& operator=(const a& a);void fun0(const a* a );
void fun1( ) const; // fun1( ) 為類成員函式
const a fun2( );
二 const的初始化
先看一下const變數初始化的情況
1) 非指標const常量初始化的情況:
a b;const a a = b;
2) 指標(引用)const常量初始化的情況:
a* d = new a();const a* c = d;
或者:
const a* c = new a();引用:
a f;const a& e = f; // 這樣作e只能訪問宣告為const的函式,而不能訪問一般的成員函式;
[思考1]: 以下的這種賦值方法正確嗎?
const a* c=new a();a* e = c;
[思考2]: 以下的這種賦值方法正確嗎?
a* const c = new a();a* b = c;
原文發布時間為:
2017-10-30 佚名
Linux系列 linux tar命令使用詳解
linux下最常用的打包程式就是tar了,使用tar程式打出來的包我們常稱為tar包,tar包檔案的命令通常都是以.tar結尾的。生成tar包後,就可以用其它的程式來進行壓縮了,所以首先就來講講tar命令的基本用法 tar命令的選項有很多 用man tar可以檢視到 但常用的就那麼幾個選項,下面來舉...
程式語言 const
問題 如果函式需要傳入乙個指標,面試官可能會問是否需要為該指標加上const,把const加在指標不同位置有什麼區別 如果寫的函式需要傳入的引數是乙個複雜型別的例項,面試官可能會問傳入值引數或者引用引數有什麼區別,什麼時候需要為傳入的引用引數加上const?1 const是用來宣告乙個常量的,當你不...
vector,deque,list技術程式設計詳解
vector,deque,list技術程式設計詳解 2008 02 10 21 16 vector,deque,list 技術程式設計詳解 1 bool empty const 判斷序列是否為空 2 begin,end const iterator begin const iterator begi...