Linux編程const使用詳細介紹
一、const基礎
如果const關鍵字不涉及到指針,我們很好理解,下面是涉及到指針的情況:
- int b = 500;
- const int* a = &b; [1]
- int const *a = &b; [2]
- int* const a = &b; [3]
- const int* const a = &b; [4]
如果你能區(qū)分出上述四種情況,那么,恭喜你,你已經邁出了可喜的一步。不知道,也沒關系,我們可以參考《Effective c++》Item21上的做法,如果const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。因此,[1]和[2]的情況相同,都是指針所指向的內容為常量(const放在變量聲明符的位置無關),這種情況下不允許對內容進行更改操作,如不能*a = 3 ;[3]為指針本身是常量,而指針所指向的內容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的;[4]為指針本身和指向的內容均為常量。
另外const 的一些強大的功能在于它在函數(shù)聲明中的應用。在一個函數(shù)聲明中,const 可以修飾函數(shù)的返回值,或某個參數(shù);對于成員函數(shù),還可以修飾是整個函數(shù)。有如下幾種情況,以下會逐漸的說明用法:
- A& operator=(const A& a);
- void fun0(const A* a );
- void fun1( ) const; // fun1( ) 為類成員函數(shù)
- 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的函數(shù),而不能訪問一般的成員函數(shù);
[思考1]: 以下的這種賦值方法正確嗎?
- const A* c=new A();
- A* e = c;
[思考2]: 以下的這種賦值方法正確嗎?
- A* const c = new A();
- A* b = c;