1. 程式人生 > >變數修飾符的定義、宣告和初始化

變數修飾符的定義、宣告和初始化

1、類物件(變數)的宣告、定義與初始化

修飾符有以下幾種,const, extern, (explicit),( mutable) , static, volatile,(virtual),(inline)其中帶括號的為自定義類型別定義過程中特有的修飾符

主要將其分為多檔案與單檔案組織結構,型別種類(內建型別,標準型別,自定義型別)進行分別討論,主要討論修飾作用、標誌問題(區分可以與不能)和建議。

下面分別說明不同修飾符的作用

修飾符

對變數的總體作用

const

更改變數預設的連結性,變數不可更改性(儲存位置更改)

extern

宣告變數的連結性,宣告函式的連結性,語言的連結性

http://blog.csdn.net/cjf_wei/article/details/66500244

static

設定變數的連結性,變數儲存位置更改

volatile

更改變數的機器關聯性,編譯器不做優化

1.1  型別物件例項/變數 宣告和定義修飾符標識

類物件例項(或者稱為變數)的宣告,與自定義類型別中的資料成員的宣告和定義不同

(有關自定義類資料成員的宣告與定義的修飾符標誌問題將單獨進行討論),其產生(宣告與定義同時)或尋找(僅僅是宣告)對應型別的變數,修飾符不區別對待變數的不同型別。程式中使用到的變數必須有且僅有一次定義,但可以進行多次宣告,且當且僅當(非自定義類內部資料成員的conststatic成員可以例外)定義時能夠初始化(定義時可採用括號初始化和賦值操作符進行初始化,但是採用賦值操作符初始化時其含義以及操作時間不同於賦值操作)。

在本小節中,主要描述不同修飾符的作用,以及預設標識,其中宣告時修飾符必須顯示標識,定義時如果有預設的修飾符可不顯示標識,但是顯示標識可提高程式可讀性,如無預設修飾則必須通過修飾符獲取相應的擴充套件。

修飾符

(前置修飾)

變數

const

extern

static

volatile

非自定義類型別中的變數宣告和定義

不可修改變數的值;定義時預設為檔案級變數,可通過顯示extern擴充套件

指定為宣告;擴充套件變數為多檔案級變數;定義時非const變數預設帶有該標識

靜態儲存變數;不可更改的檔案級變數

機器因素可更改變數,編譯器不作優化處理

1.2  自定義類資料成員定義和初始化

(自定義類宣告、定義和實現所表達的含義不懂,定義體和宣告體表示的含義也不清楚,變數的定義表示為其分配儲存空間,宣告表示為指定該變數的型別)

自定義類中,類宣告(非前向宣告)與類定義同變數的宣告和定義含義有所不同,自

定義類宣告表明該類的特性,而該類的類定義可以表述為定義了一種新的資料結構(http://www.weixueyuan.net/view/6333.html),類實現表訴為???

資料成員在類宣告(非前向宣告)中進行宣告,一般在類建構函式中進行初始化,即定義,除static成員資料必須在類定義體的外部定義和初始化,但const static成員資料可在自定義類宣告體內部進行初始化,雖然也必須在宣告體外部進行不初始化的定義。修飾符采用前向標識,在建構函式中進行初始化完成資料的定義,但在static修飾符下,其需要在類定義體的建構函式外部單獨進行初始化,其定義和初始化分開進行。

     修飾符

(前置

修飾)

宣告

初始化

const

static

volatile

mutable

(可在const函式中更改該資料成員)

宣告時標識

所有資料的特殊作用擴充套件都需要在宣告時顯示標識

初始化時標識

必須在建構函式初始化列表中完成初始化

需要在類定義體外進行初始化,但不可進行顯示標識

可在建構函式初始化列表中初始化,或在建構函式體中進行非初始化賦值