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...