C和C 中const的用法異同總結

2021-10-31 15:48:33 字數 1657 閱讀 3959

c中const的用法總結起來主要分為以下兩種:

1.在定義變數時使用(由於const常量在定義後不能被修改,所以在定義時一定要進行初始化操作):

a) 最簡單的用法,說明變數為乙個常變數(在以下例子裡,int 和const的先後順序可以改變的,這無所謂):

const int a=100;

int const b=100;

b) 說明指標為指向常數的指標,即指標本身的值是可以改變的:

const int *a=&b;

c) 說明指標本身的值不可改變,但指向的內容可改變:

int * const a = &b;

d) 說明指標為指向常數的常指標,即指標本身與指標指向的內容都不可改變:

const int * const a = &b;

e) 說明引用為常數引用,即不能改變引用的值:

const int &a=100。

2.在定義函式時使用:

a) 作為引數使用,說明函式體內是不能修改該引數的:

void func(const int a);

b) 作為返回值使用,說明函式的返回值是不能被修改的:

const int func();

c) 在函式中使用const,情況與定義變數的情況基本一致:

c++中區別於c的const用法主要分為以下兩種:

1.const類成員

const類成員在物件構造期間允許被初始化並且在以後不允許被改變。const類成員和一般的const 變數有所不同。const類成員是對應於每個物件而言,它在物件構造期間被初始化,在這個物件的生存週期中不允許被改變。

2.const 成員函式

const 成員函式不允許在此函式體內對此函式對應的類的所有成員變數進行修改,這樣可以提高程式的健壯性。const一般放在函式體後:

functiontype fun() const。

3.const在c和c++中最大的不同是,在c中,const預設具有外部鏈結,而c++中則是內部鏈結。所以當你只在定義const常量的檔案中使用該常量時,c++不給你的const常量分配空間,此時const int c = 0;相當於#define c 0;而在c中,它會給每個const 常量分配記憶體空間。

4.看下面乙個程式:

#include

int main()

在vc6.0中命名為.c檔案,編譯時,編譯器提示錯誤,int b[a]這行:expected constant expression

命名為.cpp檔案,則沒問題。

這個問題跟編譯器無關,code::blocks之所以編譯能通過,其實是因為gcc預設是啟用編譯器擴充套件的,把工程的build option中的"in c mode ,supper all iso c90 programs和"treat as errors the warnings demonded by strict iso ......"兩項選上,去掉所有的gcc擴充套件,實行嚴格的c90標準,就不能通過編譯了。

這個問題其實跟const是所謂「唯讀」還是「常量」也無關,const在c/c++語法中的確切意義,依然是乙個不能通過被它修飾的識別符號直接改變的變數。

問題的真正原因是:在c中,常量表示式必須是編譯期常量,a不是編譯期常量(是執行期常量),無論c90還是c99都如此,但c++沒有了這個規定,對此不作限制。正因為const int i在c中不是常量表示式,因此不能用於定義陣列。

c和c 中const用法總結

const型別定義 指明變數或物件的值是不能被更新,引入目的是為了取代預編譯指令 常量必須被初始化 cons的作用 1 可以定義const常量例如 constintmax 100 intarray max 2 便於進行型別檢查例如 voidf constinti 編譯器就會知道i是乙個常量,不允許修...

C 中const用法總結

c 中const用法總結 月光林地 部落格園 修飾普通變數和指標 const修飾變數,一般有兩種寫法 consttypevalue typeconstvalue 這兩種寫法在本質上是一樣的。它的含義是 const修飾的型別為type的變數value是不可變的。對於乙個非指標的型別type,無論怎麼寫...

C盤各種檔案的用法

c windows system32 drivers etc hosts 檔案有什麼作用 host 是乙個沒有副檔名的系統檔案,可以用記事本等工具開啟,其作用就是將一些常用的 網域名稱與其對應的ip位址建立乙個關聯 資料庫 當使用者在瀏覽器中輸入乙個需要登入的 時,系統會首先自動從hosts檔案中尋...