常數(Const)
「const」為Constant的縮寫,是用一個變數來代表一個常使用的物件。
假設我們要設定圓周率pi為3.14,如果用上述方式設定的話,pi是可以變動的!!
這對於程式來說是相當危險的事情,牽一髮動全身!
因此我們會在 pi宣告前加個「鎖」讓他沒辦法更動,就是「const」
下面段意思是,const 一個 int p = 3.14 的變數
下面段意思是,const
p = 3.14 的變數,而這變數是個int,兩著有些許不同,但效果一樣
Const還可以被用來宣告函數,其用法相當多種,修飾不同的東西。
1.放在函數最後面(在類別宣告中)
其函數在執行過程中便不能修改資料成員,語法如下:
回傳資料型別 函數名稱(引數) const {函式內容}
2.放在函數最前面
其回傳值將是const,語法如下:
const 回傳資料型別 函數名稱(引數)
3.放在引數變數前
其引數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 const 引數)
4.放在引數前,而引數為指標變數
其指標變數所指示的變數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 const *引數)
或是
回傳資料型別 函數名稱(const 引數型別 *引數)
5.放在引數前,而引述為指標變數前
其參考變數所參考的變數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 const &引數)
6.引數設const,再設為指標變數
其指標引數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 *const 引數)
7.引數設const,再設為指標變數,再加上const
其指標引數將變為const,且所指引的變數將為const,語法如下:
回傳資料型別 函數名稱(引數型別 *const 引數)
總結:
參考文獻:
1. http://csie-tw.blogspot.com/2010/03/c-constconst-pointer-pointer-to-const.html
2. C++ primer 4/e 中文版 侯傑老師譯
3. Visual C++ 2005 ecpress 入門進階 文魁資訊
1
|
int pi = 3.14; |
1
2
|
pi=3.1; pi=3.1415; |
因此我們會在 pi宣告前加個「鎖」讓他沒辦法更動,就是「const」
下面段意思是,const 一個 int p = 3.14 的變數
1
|
const int pi = 3.14; |
1
|
int const pi = 3.14; |
Const還可以被用來宣告函數,其用法相當多種,修飾不同的東西。
1.放在函數最後面(在類別宣告中)
其函數在執行過程中便不能修改資料成員,語法如下:
回傳資料型別 函數名稱(引數) const {函式內容}
1
|
int f1( int x) const {/...../} |
其回傳值將是const,語法如下:
const 回傳資料型別 函數名稱(引數)
1
|
const int f2( int x) {/...../} |
其引數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 const 引數)
1
|
int f3( int const x) {/...../} |
其指標變數所指示的變數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 const *引數)
1
|
int f4( int const *x) {/...../} |
回傳資料型別 函數名稱(const 引數型別 *引數)
1
|
int f4( const int *x) {/...../} |
其參考變數所參考的變數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 const &引數)
1
|
int f5( int const &x) {/...../} |
其指標引數將變為const,語法如下:
回傳資料型別 函數名稱(引數型別 *const 引數)
1
|
int f6( int * const x) {/...../} |
其指標引數將變為const,且所指引的變數將為const,語法如下:
回傳資料型別 函數名稱(引數型別 *const 引數)
1
|
int f7( const int * const x) {/...../} |
總結:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
class Book{ private : //資料成員 int c ; string name; public : Book(){ c=0; } int f1( int x) const { c = 1 ; //錯誤!! set_name函式為const函式,不可更動資料成員 } const int f2( int x){ x++; c++; return c; } int f3( int const x){ x++; //錯誤!! x為const變數 c++; return c; } int f4( int const *x){ (*x)++; //錯誤,因為原本指向的變數被設定為const了 *x++; //正確,意思是*(x++),只是改變x的記憶體位置,再指定到變數 return c; } int f5( int const &x){ x++; //錯誤!x所參考的變數已經是const,x也是個const return c; } int f6( int * const x){ (*x)++; //正確,x是const,但x所指引的變數並非const,可對其做++動作 *x++; //錯誤!意思是*(x++),x已經是const,所以不可更動記憶體位置 return c; } int f7( const int * const x){ (*x)++; //錯誤!x所參考的變數已經是const,x也是個const *x++; //錯誤!意思是*(x++),x已經是const return c; } }; |
1. http://csie-tw.blogspot.com/2010/03/c-constconst-pointer-pointer-to-const.html
2. C++ primer 4/e 中文版 侯傑老師譯
3. Visual C++ 2005 ecpress 入門進階 文魁資訊
沒有留言:
張貼留言