C 中的 const 詳解

2022-09-07 17:00:24 字數 2140 閱讀 1802

在使用#define時,比如#define max 10000,如果出現錯誤,編譯器並不會提示max,因為在預處理階段已經把max替換成了10000,因此編譯器會莫名其妙的提示10000這個數字出現了錯誤,從而不利於程式debug,但是如果使用const int max=10000,編譯器就會準確的提示max有錯誤,從而可以輕易地定位。

對於乙個字元指標的定義char * p;加上const關鍵字時無非有三種方法,即把const放在前中後三個位置。那麼他們之間有什麼區別呢?

1 const char * p1;//表示p1指向了的字串不可更改

2 char const * p2;//同上

3 char * const p3;//表示p2指標的指向不可更改

注意1和2的意義完全相同,只是不同的程式設計師具有不同的編碼習慣,我們要熟悉所有的這三種用法,下面給出一段**,來說明他們三個的區別:

1 #include 2 #include 3 #include 

4 #include 5 #include 6 #include 7

8using

namespace

std;910

int main(int argc, char *ar**)

1117

18 p1[0] = '

a';//

錯誤!const char * p指向乙個不可改變的物件

19 cout<0]<2021

char

const * p2 = new

char[10

];22 p2[0] = '

a';//

錯誤!同上

23 cout<0]<2425

char ch[5] = "

abcd";

26delete p1;

27 p1 = ch;//

正確 指標的值可以修改

28 cout2930

char * const p3 = new

char[100

];31 p3[0] = '

a';//

正確!32 cout<0

];33

34delete p3;

35 p3 = ch;//

錯誤 指標的值不可以修改

36 cout37 }

在第18行和第22行中,由於指標所指向的物件不可修改,因此會出現錯誤,而在35行處其指標的指向不可修改,因此不可把它指向另乙個位址。

const不僅可以修飾變數,也可以修飾函式,當const修飾函式,例如符過載操作, int & operator (int n) 時有兩個位置可以放置:

1 const int & operator(int n);

2 int & operator(int) const;

前者指其返回值不可修改,例如對於乙個const物件 cint,我們不可以使用cin[0]=3,這種左值的方式對其進行賦值,因為其是乙個const物件,應該不能夠對其內部值進行修改。

而後者的意思是該操作符函式內部不對其物件內部進行修改,是乙個const函式,如果其函式實現對內部成員進行了修改,則會報錯。

對於乙個操作符,我們往往使用過載的方式來實現其const版本和非const版本,在const版本中,如果物件定義為const其內部成員不可修改,否則可以自由修改。例如如下**:

1 #include 2 #include 3 #include 

4 #include 5 #include 6 #include 7

8using

namespace

std;910

class

myintarray

1122}23

const

int & operator (int n) const

2427

int & operator (int

n) 28

31};

3233

int main(int argc, char *ar**)

34

對於乙個非const物件array我們可以自由的把array[0]作為左值,而對於乙個const物件carray我們則不可以把其作為左值。由此可發現const的強大之處。

C 中的 const 詳解

在使用 define時,比如 define max 10000,如果出現錯誤,編譯器並不會提示max,因為在預處理階段已經把max替換成了10000,因此編譯器會莫名其妙的提示10000這個數字出現了錯誤,從而不利於程式debug,但是如果使用const int max 10000,編譯器就會準確的...

c 中const的用法詳解

const是用於保護程式的健壯性,減少程式隱患。const的用法比較複雜,總結起來又分為以下兩種 1 在定義變數時使用 a const int a 100 最簡單的用法,說明變數a是乙個常變數 b int const b 100 與a功能相同 c const int a b 指向常數的指標,即指標本...

c 中const的使用詳解

const 是c 中常用的型別修飾符,常型別是指使用型別修飾符const說明的型別,常型別的變數或物件的值是不能被更新的。1 定義常量 1 const修飾變數,以下兩種定義形式在本質上是一樣的。它的含義是 const修飾的型別為type的變數value是不可變的。type const valuena...