C static const 修飾成員

2021-09-30 12:27:19 字數 965 閱讀 5129

const資料成員只在某個物件生存期內是常量,而對於整個類而言卻是可變的。因為類可以建立多個物件,不同的物件其const資料成員的值可以不同所以不能在類宣告中初始化const資料成員,因為類的物件未被建立時,編譯器不知道const 資料成員的值是什麼。

class test

enum ;

private:

const int a; // 只能在建構函式初始化列表中初始化,這個似乎很少用到???

static int b; // 不能賦值,初始化!!!!

const static int c; // 與static const int c;相同;可以在這裡宣告並定義賦值 c=0 (以便在此類的宣告裡被用到,如定義陣列時需要長度int常量,但不是所有編譯器都支援在這裡初始化,有些支援,這些支援的[可能]要求你在實現檔案中定義一次如「const int test::c;」(設初值了); 如果不支援,在定義數長度時,可以用enum來代替常量int).

};int test::b = 0; //不能以成員列表初始化,不能在宣告處初始化,因為不屬於某個物件。

const int test::c = 0;//注意:給靜態成員變數賦值時,不能加static修飾。但const要加。

總結:

1. 只有const 則一定只能在初始化列表或者建構函式中初始化

2.只有static 則只能在函式體宣告之外初始化

3.const與static同在,那變數在【類宣告處(即標頭檔案)---要編譯器支援,如vs支援在此初始化】和 【函式體外(或實現檔案)

但是不能加static修飾)

都可以初始化,但是不能在初始化列表初始化

初始化列表及const static修飾成員

初始化順序和初始化列表的順序無關,和成員變數 物件的宣告順序有關。class test void show private int ma int mb int mc int main 執行結果為 ma 10 mb 10 mc 10 常物件不能呼叫普通方法 常物件只能呼叫常方法 普通物件也可以呼叫常方...

oc82 成員變數使用copy修飾

import typedef void myblock inte ce person nsobject property nonatomic,retain nsstring name property nonatomic,copy nsstring name 注意 如果是block使用copy並不是...

oc82 成員變數使用copy修飾

import typedef void myblock inte ce person nsobject property nonatomic,retain nsstring name property nonatomic,copy nsstring name 注意 如果是block使用copy並不是...