c和c 中const用法總結

2021-11-07 12:18:52 字數 1871 閱讀 6006

const型別定義:指明變數或物件的值是不能被更新,引入目的是為了取代預編譯指令

常量必須被初始化

cons的作用

(1)可以定義const常量例如:

constintmax=100;

intarray[max];

(2)便於進行型別檢查例如:

voidf(constinti

編譯器就會知道i是乙個常量,不允許修改;

(3)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。

還是上面的例子,如果在函式體內修改了i,編譯器就會報錯;

例如:voidf(constinti)

(5)為函式過載提供了乙個參考。

classa

file://乙個函式

voidf(inti)constfile://上乙個函式的過載

......

};(6)可以節省空間,避免不必要的記憶體分配。

例如:#definepi3.14159file://常量巨集

constdoulbepi=3.14159;file://此時並未將pi放入rom中

......

doublei=pi;file://此時為pi分配記憶體,以後不再分配!

doublei=pi;file://編譯期間進行巨集替換,分配記憶體

doublej=pi;file://沒有記憶體分配

doublej=pi;file://再進行巨集替換,又一次分配記憶體!

const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干個拷貝。

(7)提高了效率。

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

使用const

(1)修飾一般常量,常陣列,常物件

修飾符const可以用在型別說明符前,也可以用在型別說明符後。例如:

intconstx=2;  或  constintx=2;

intconsta[5]=;或constinta[5]=;

classa; constaa;或aconsta;

(2)修飾指標

constint*a;或intconst*a;//const修飾指向的物件,a可變,a指向的物件不可變

int*consta; //const修飾指標a,a不可變,a指向的物件可變

constint*consta;//指標a和a指向的物件都不可變

(3)修飾引用

constdouble&v;該引用所引用的物件不能被更新

(4)修飾函式的返回值:

const修飾符也可以修飾函式的返回值,是返回值不可被改變,格式如下:

constintfun1();

constmyclassfun2();

(5)修飾類的成員函式:

const修飾符也可以修飾類的成員函式,格式如下:

classclassname

;這樣,在呼叫函式fun時就不能修改類裡面的資料

(6)在另一連線檔案中引用const常量

externconstinti;//正確的引用

externconstintj=10;//錯誤!常量不可以被再次賦值

放在類內部的常量有什麼限制?

classa

;初始化類內部的常量

1初始化列表:

classa

private:

constinti;

};2外部初始化,例如:

classa

private:

staticconstinti;

};constinta::i=3;

C 中const用法總結

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

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

c中const的用法總結起來主要分為以下兩種 1 在定義變數時使用 由於const常量在定義後不能被修改,所以在定義時一定要進行初始化操作 a 最簡單的用法,說明變數為乙個常變數 在以下例子裡,int 和const的先後順序可以改變的,這無所謂 const int a 100 int const b...

const用法總結

看到const 關鍵字,很多程式設計師想到的可能是const 常量,這可有點象踩到陷井上還不知道自己危險了。讀讀以下文字會使你對c 中的const有乙個全面的認識。const 是c 中常用的型別修飾符,有某些微妙的應用場合,如果沒有搞清本源,則錯誤在所難免。本篇中將對const進行辨析。溯其本源,究...