c和c 中const用法具體的區別是什麼

時間 2022-03-12 19:45:18

1樓:影子

c中的const,功能比較單一,較容易理解:

作用:被修飾的內容不可更改。

使用場合: 修飾變數,函式引數,返回值等。(c++中應用場合要豐富的多)

特點: 是執行時const,因此不能取代#define用於成為陣列長度等需要編譯時常量的情況。同時因為是執行時const,可以只定義而不初始化,而在執行時初始化。

如 const int iconst;。 另外,在c中,const變數預設是外部連結,因此在不同的編譯單元中如果有同名const變數,會引發命名衝突,編譯時報錯。

c++中的const:跟c中比較,內容要豐富很多,當然,作用也更大了

1:非類成員const

*在c++中,const變數(在這裡涉及的const都不是類中的const,類中的const專門提出來記錄)預設是內部連線的,因此在不同的編譯單元中可以有同名的const 變數定義。

*是編譯時常量,因此可以像#define一樣使用,而且因為上面一點,可以在標頭檔案中定義const變數,包含的不同的cpp檔案(編譯單元)中使用而不引起命名衝突。

*編譯器預設不為const變數分配記憶體,除非:1. 使用 extern 申明, 2:程式中有引用const 變數的地址。

* 可以使用下面的型別轉換(不安全的): 1: int * = (int *)pconst 2: int * = const_castpconst(c++解const屬性cast)

* 函式引數或者返回值能使用 const & or const * 時,儘量使用const屬性,增強程式健全性。

*c++中臨時物件/內建變數預設具有const屬性

2:類中的const

*類中的const與c語言中的const一樣,只是執行時常量,不能作為陣列維數使用,即不能取代#define。在類中使用下面兩種方式取代#define: 1:

static const... 2: enum//enum 不佔儲存空間

*類中的const 變數佔用儲存空間

*類中的const成員變數需要在建構函式初始化列表中初始化

*const 物件:在該物件生命週期內,必須保證沒有任何成員變數被改變。const物件只能呼叫const成員函式。

*const成員函式: void fun() const ... 不僅能被const物件呼叫,也能被非const物件呼叫,因此,如果確認一個任何成員函式不改變任何成員變數,應該習慣性將該函式定義成const型別。

如果const成員函式需要改變成員變數,有兩種實現方式: 1 ,const_castthis強制取消this指標的const屬性。 2:

將被改變的成員變數定義成mutable:mutable int i; //應永遠只使用第二種方法,讓任何閱讀程式的人都知道該變數可能被const函式改變。

*如果一個物件被定義成const,那麼該const物件“可能”會被放入到rom當中,這在嵌入式開發當中有時非常重要。。。。(不能有任何自定義的constructor 和destructor。它的基類或者成員物件不能有自定義的constructor和destructor,不能有任何mutable成員變數)

2樓:匿名使用者

const基本用法是一樣的,就是表達 “一個不可改變”的意思

只是c++中增加了在類成員函式定義尾 增加const使用,表達本函式中無任何對成員變數的修改操作控制。如: int get_data () const

c和c++中const的區別是什麼?請說具體點

3樓:匿名使用者

c中的const,功能比較單一,較容易理解:

作用:被修飾的內容不可更改。

使用場合: 修飾變數,函式引數,返回值等。(c++中應用場合要豐富的多)

特點: 是執行時const,因此不能取代#define用於成為陣列長度等需要編譯時常量的情況。同時因為是執行時const,可以只定義而不初始化,而在執行時初始化。

如 const int iconst;。 另外,在c中,const變數預設是外部連結,因此在不同的編譯單元中如果有同名const變數,會引發命名衝突,編譯時報錯。

c++中的const:跟c中比較,內容要豐富很多,當然,作用也更大了

1:非類成員const

*在c++中,const變數(在這裡涉及的const都不是類中的const,類中的const專門提出來記錄)預設是內部連線的,因此在不同的編譯單元中可以有同名的const 變數定義。

*是編譯時常量,因此可以像#define一樣使用,而且因為上面一點,可以在標頭檔案中定義const變數,包含的不同的cpp檔案(編譯單元)中使用而不引起命名衝突。

*編譯器預設不為const變數分配記憶體,除非:1. 使用 extern 申明, 2:程式中有引用const 變數的地址。

* 可以使用下面的型別轉換(不安全的): 1: int * = (int *)pconst 2: int * = const_castpconst(c++解const屬性cast)

* 函式引數或者返回值能使用 const & or const * 時,儘量使用const屬性,增強程式健全性。

*c++中臨時物件/內建變數預設具有const屬性

2:類中的const

*類中的const與c語言中的const一樣,只是執行時常量,不能作為陣列維數使用,即不能取代#define。在類中使用下面兩種方式取代#define: 1:

static const... 2: enum//enum 不佔儲存空間

*類中的const 變數佔用儲存空間

*類中的const成員變數需要在建構函式初始化列表中初始化

*const 物件:在該物件生命週期內,必須保證沒有任何成員變數被改變。const物件只能呼叫const成員函式。

*const成員函式: void fun() const ... 不僅能被const物件呼叫,也能被非const物件呼叫,因此,如果確認一個任何成員函式不改變任何成員變數,應該習慣性將該函式定義成const型別。

如果const成員函式需要改變成員變數,有兩種實現方式: 1 ,const_castthis強制取消this指標的const屬性。 2:

將被改變的成員變數定義成mutable:mutable int i; //應永遠只使用第二種方法,讓任何閱讀程式的人都知道該變數可能被const函式改變。

*如果一個物件被定義成const,那麼該const物件“可能”會被放入到rom當中,這在嵌入式開發當中有時非常重要。。。。(不能有任何自定義的constructor 和destructor。它的基類或者成員物件不能有自定義的constructor和destructor,不能有任何mutable成員變數)

c++中的const的用法

4樓:傅夏生

個人的一些筆記,希望可以幫助你

const 的使用

const經常用來修飾一個值不能改變的量,安全,並且能消除儲存操作

const的幾種用法:

(1) 說明值常量

(2) 說明指標

(3) 說明函式引數及其返回值

(4) 說明類的常量和成員函式

const 說明值常量

值常量的說明一般放在標頭檔案或者檔案的開始部分,也可以放在類中進行說明

(1) 說明符號常量,表明符號代表的是一個常量,語法:

《型別》const《常量名》=《表示式》,《常量名》=《表示式》……

例如:double const pi=3.14; const double pi=3.14;

(2) 說明陣列常量,語法格式:

《型別》const《陣列名》[大小]=;

const型別》 《陣列名》[大小]=;

(3) 說明物件常量,語法格式:

《類名》const《物件名》;

const 《類名》 《物件名》;

(4) 說明引用常量

(5) const與c語言中的#define的差別

無參巨集不是符號常量,沒有資料型別,沒有值,在記憶體中不分配地址。它在預處理時做巨集替換,不可能做型別檢查。

const定義的常量是符號常量,有資料型別,也有值,且其值不可改變,在記憶體中有地址,編譯時做型別檢查。

const和指標

const和指標的三種經典組合

(1) 指向常量的指標——const int *p;

(2) 常指標——char *const pc=’a’;

(3) 指向常量的常指標——const char *const pc=’a’

指向常量的指標(指標指向一個不可變數)

指標在指向有一個常量後,不能通過指標修改這個常量,但是可以指向一個新的常量,例如:

const char *pc=”abcd”;

pc[3]=’a’;不合法,企圖修改原來指向的常量

pc=“wert”;合法指向另外一個常量

常指標要把指標變數中的值(也就是地址)宣告為常量,採用以下語法:

《類那些》*const《指標名》[=《初值》;]

這樣定義的指標變數中存放的指標是個常量,稱為常指標。定義後,該指標指向固定的記憶體單元,不能再指向其他記憶體單元,通過它可以修改所指單元裡存放的內容。例如:

char *const pc=”abcd”;

pc[3]=’a’;合法,指標指向的物件可以修改

pc=”qwer”;不可以,指標的指向不可以修改

指向常量的常指標

指標變數中存放的指標本身和指標所指向的物件都是不可以改變的。

例如:const char *const pc=”asdf”;

pc[3]=’a’;不合法,不能改變指標所指物件的值

pc=”qwer”;不合法,不能改變指標的指向

const說明函式引數和返回值

用const限定函式引數和返回值,是const最重要的用法。用const修飾函式引數意味著傳過來的實參在函式中是不能被修改的。一般情況下不需要,但是在用指標和引用傳值的場合,為避免實參被修改,就用const修飾,更安全。

修飾函式的返回值,意味著該返回值不能被修改。如果傳值並返回地址,const將保證該地址上的內容不會被改變。這就意味著該函式不能作為左值使用,在這種情況下,const通常也是與引用和指標一起使用的。

類中的const

1. 常成員的函式

2. 常資料成員

3. 常物件

C 裡const有什麼用,c 中const的作用是什麼?

const 限定一個變數是const,一旦初始化後,它的數值就不允許改變,只能用於 讀 const量不能做左值,不能用於 寫 例如 const int x 10 宣告和初始化x 20 錯了,x 不能做左值。printf d n x 用於指標時,比較複雜。const int p p 只讀int con...

C 中的用法,C 中new的用法

除了樓上說的 還有 引用 和 取地址 的含義int a int b a 上述兩行語句執行完之後,a b表示同一個變數,對其中一個的操作相當於對另一個的操作 int a int b a 則b中儲存的是a的地址。對 b 的任何操作相當於對a的操作。 朱古力兜 表示引用,就是物件的另一個名字,例如 int...

c中new和delete的用法

肥仙女 在c 程式設計中,使用new分配的陣列可用delete釋放。這裡釋放的是動態分配的陣列空間,而不是靜態分配的陣列空間,詳細步驟 1 例如,我們動態建立了一個一維int陣列arr,現在需要將它釋放。2 這時只需要使用delete陣列名即可。3 注意,要釋放陣列所佔的記憶體,不能少。否則,用de...