C 中 const 和 readonly 的區別

2021-04-03 00:17:13 字數 1087 閱讀 1475

const 和 readonly 的區別,總是不太清楚,於是查了查資料。

const 的概念就是乙個包含不能修改的值的變數。

常數表示式是在編譯時可被完全計算的表示式。因此不能從乙個變數中提取的值來初始化常量。

如果 const int a = b+1;

b是乙個變數,顯然不能再編譯時就計算出結果,所以常量是不可以用變數來初始化的。

readonly 允許把乙個字段設定成常量,但可以執行一些運算,可以確定它的初始值。

因為 readonly 是在計算時執行的,當然它可以用某些變數初始化。

readonly 是例項成員,所以不同的例項可以有不同的常量值,這使readonly更靈活。

readonly 關鍵字與 const 關鍵字不同。

1. const 字段只能在該字段的宣告中初始化。

readonly 字段可以在宣告或建構函式中初始化。因此,根據所使用的建構函式,readonly 字段可能具有不同的值。

2. const 欄位是編譯時常數,而 readonly 欄位可用於執行時常數。

3. const 預設就是靜態的,而 readonly 如果設定成靜態的就必須顯示宣告。

4.const 對於引用型別的常數,可能的值只能是 string 和 null。

readonly可以是任何型別

* 需要注意的乙個問題是:

對於乙個 readonly 的 reference 型別,只是被限定不能進行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的。

public static readonly class1 my = new class1();

…my.someproperty = 10;

//正常

my = new class1(); //出錯,該物件是唯讀的

但是,如果上例中的 class1 不是乙個 class 而是乙個 struct,那麼後面的兩個語句就都會出錯。

static readonly

作者blog:http://blog.csdn.net/kgdiwss/

C 中頂層const和底層const

指標本身是乙個物件,由於,指標實際相應著記憶體單元的一段儲存空間,然而,指標所指向的也是乙個資料物件,因此,指標是乙個常量與指標所指向的是乙個常量是兩個全然不同的概念,頂層 const 表示的是 指標本身是乙個常量,底層 const 表示的是 指標所指的物件是乙個常量,更普通情況下,頂層 const...

C 中頂層const和底層const

頂層const表示指標本身是個常量,底層const表示指標所指的物件是乙個常量。int i 0 int const p1 i 不能改變p的值,p是乙個指標,所以p是乙個頂層const const int p2 i 表示不能改變指標所指i的值,所以是乙個底層const const的頂層和底層不只是限定...

c 中const和引用

c 和c語言裡面的const 1 在c語言裡面的const修飾的量是乙個常變數,不能作為左值,但是可以通過洩露指標和引用去修改它,int a 10 int p a 洩露了常量的引用。但是 int a 10 const int p a 是正確的。因為a本來就是普通的變數,而通過常量 p不能改變它,但a...