c++類內的static變量初始化和static函數


class A
{
static int si;
static void sfunc(){cout<< si;}
};

int A::si=0;//靜態成員不能在類內初始化。
使用時:int tmp=A::si

類的static member不會存在每一個具體的class object之中,而是存放在全局變量區,不論一個class有多少個具體實例,static data都只有一個。

static function
1.由於其沒有隱含的this指針,所以不能夠直接存取其class object中的非靜態成員數據。
2.不能聲明為const ,virtual。

由於static member和static function都是依賴於整個class類而非一個具體的class object,所以調用時可以直接通過class名調用而不需要具體的class object
cout<<A::si;
A::sfunc();

為什么static成員一定要在類外初始化?

這是因為被static聲明的類靜態數據成員,其實體遠在main()函數開始之前就已經在全局數據段中誕生了!其生命期和類對象是異步的,(而且靜態語意說明即使沒有類實體的存在,其靜態數據成員的實體也是存的)這個時候對象的生命期還沒有開始,如果你要到類中去初始化類靜態數據成員,讓靜態數據成員的初始化依賴於類的實體,,那怎么滿足前述靜態語意呢?難道類永遠不被實例化,我們就永遠不能訪問到被初始化的靜態數據成員嗎? 所以為了滿足C++的static語意,static成員一定要在類外初始化!

通常靜態數據成員在類聲明中聲明,在包含類方法的文件中初始化.初始化時使用作用域操作符來指出靜態成員所屬的類.

https://blog.csdn.net/shayne000/article/details/88532415


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM