天天看點

static成員函數

1.static成員函數不能定義為const的,這是因為static成員函數隻是全局函數的一個形式上的封裝,而且static成員函數不能通路類的非靜态成員(沒有this)指針,修改非靜态資料成員又從何說起呢?還有如果成員函數傳回值是個引用的話,則也不能聲明為const類型,因為傳回引用就意味着你在函數外面可能會修改其指向的記憶體。

2.static成員函數不能聲明為const,但是static 的資料成員可以聲明為const。

const修飾符用于表示函數不能修改成員變量的值,該函數必須是含有this指針的類成員函數,函數調用方式為thiscall。而類中的static函數本質上是全局函數,調用規約是__cdecl或__stdcall,不能用const來修飾它。

如果既想定義const的類變量,又想通路其修改成員變量的成員函數,可以用mutable關鍵字來聲明要修改的變量名。

3.隻在類體的函數聲明前加static,類體外函數定義不能指定關鍵字static。靜态資料成員必須在類定義外初始化,但const靜态資料成員除外,const靜态資料成員可以在類體中初始化。static成員函數也不能被聲明為虛函數。

class Bar

{

static Bar mem1;//ok

Bar *mem2;//ok

Bar mem3; //erro

}

繼續閱讀