C 程式設計之關鍵字 1 Const

2021-07-02 11:48:17 字數 1736 閱讀 1591

1、c++中const有什麼用?

不要一聽到const就說是常量,這樣給考官一種在和乙個外行交談的感覺。應該說

const

修飾的內容不可改變就行了, 定義常量只是一種使用方式而已,還有const引數, const資料成員, const成員函式,const返回值等, 被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。(參考:

另外,使用const物件可以提高程式的可讀性與可維護性。

2、何處用到const限定符?

定義常量、const引數、const資料成員、const成員函式、const返回值。

(1)   定義常量:定義const常量只是const的一種使用方式而已。定義const常量時注意:(1)定義時必須初始化,定義之後就不能被修改;(2)const物件預設為檔案的區域性變數,在其他檔案使用時需要在定義時用extern修飾。

(2)   const引數:非引用形參(指標形參、const形參)、引用形參(const引用形參比非const引用形參更加靈活)。

(3)   const返回值:返回引用。

(4)   const資料成員:const修飾類的資料成員,表示成員常量,不能被修改,同時它只能在初始化列表中賦值。

(5)   const成員函式:a. const成員函式不被允許修改它所在物件的任何乙個資料成員,b. const成員函式能夠訪問物件的const成員,

(參考:

3、const、static、const static、static const

常量資料成員:必須在建構函式初始化列表中進行初始化,與類的具體物件相關,不同的物件值可能不同。

靜態資料成員:必須在對應的.cpp檔案中初始化,不能在類內初始化,與類是相關的,即使沒有具體物件也能呼叫類的靜態成員函式與資料成員。

靜態常量資料成員:可以在類內進行初始化,也可以在相應的.cpp中初始化,注意:在cpp中給靜態常量資料成員變數賦值時,不在需要加static修飾,但const要加,與類和物件相關。

(參考: 

4、const 與指標

int pi = 10;

const int *p; //指向常物件的指標

int* const p = π // 常指標

typedefstring * pstring;

constpstring pi = &s1; //常指標 等價於string * const pi;

(參考: 

5.const 與dedine

c中使用的是巨集#define定義常量, c++使用更好的const來定義。

區別:(1)   編譯器處理方式不同

define巨集是在預處理階段展開。

const常量是編譯執行階段使用。

(2)   型別和安全檢查不同

define巨集沒有型別,不做任何型別檢查,僅僅是展開。

const常量有具體的型別,在編譯階段會執行型別檢查。

(3)   儲存方式不同

define巨集僅僅是展開,有多少地方使用,就展開多少次,不會分配記憶體。#define不分記憶體,因為它是預編譯指令,編譯前進行了巨集替換。

const常量會在記憶體中分配(可以是堆中也可以是棧中)。

(4)   const無法代替巨集作為衛哨來防止檔案的重複包含。

(由於const定義常量從彙編的角度來看,只是給出了對應的記憶體位址, 而不是象#define一樣給出的是立即數,所以,const

定義的常量在程式執行過程中只有乙份拷貝,而#define

定義的常量在記憶體中有若干個拷貝。)

C語言關鍵字 Const

c中const的使用 雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下面幾個問題。問題 const變數 常量 為什麼下面的例子在使用乙個const變數來初始化陣列,ansi c的編譯器會報告乙個錯誤呢?const int n 5 int a n 答案...

C中const關鍵字

const 用法 定義常量,修飾指標 函式的輸入引數和返回值,把定義或者修飾的變數屬性設為唯讀。本質上它只是在全域性資料段或者棧中定義的是乙個唯讀的常量,不是真正位於字串常量區。所以關鍵字const 並不能把變數變成真正的常量,事實上還是可以改變 const 定義的變數的值。const 的目的是為了...

C語言關鍵字const

const 是constant的縮寫,只要有變數前面用const修飾,就意味著該變數裡面的資料是readonly。const可以修飾基本型別,構造型別,指標,等。const int a 10 去掉int a 的值不變 int const a 10 去掉int a的值不變 const int a 10...