久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

為何c++中靜態(tài)成員變量要在類外部再定義

 心不留意外塵 2016-03-10
from http://blog.csdn.net/foreverhuylee/article/details/45132499
c++中靜態(tài)成員變量要在類外部再定義,否則產(chǎn)生link2001錯(cuò)誤.

class testClass
{
  public:
  static int m_i;
};

// 類外部定義,,若不寫會(huì)產(chǎn)生
// error LNK2001: unresolved external symbol "public: static int testClass::m_i" (?m_i@testClass@@2HA)
int testClass::m_i;

int main(int argc, char* argv[])
{
  printf("%d\n",testClass::m_i);
  printf("\n");
  return 0;
}

為什么要在類的外部進(jìn)行定義的原因:
1. 在類中,只是聲明了靜態(tài)變量,,并沒有定義,。
2. 聲明只是表明了變量的數(shù)據(jù)類型和屬性,并不分配內(nèi)存,;定義則是需要分配內(nèi)存的,。
   注意:如果在類里面這么寫int a; 那么是既聲明了變量,,也定義了變量,兩者合在一起了,。
3. 靜態(tài)成員是“類級(jí)別”的,,也就是它和類的地位等同,而普通成員是“對(duì)象(實(shí)例)級(jí)別”的,。
   類級(jí)別的成員,,先于該類任何對(duì)象的存在而存在,它被該類所有的對(duì)象共享,。
4. 現(xiàn)在,,咱們假定要實(shí)例化該類的一個(gè)對(duì)象,那么會(huì)發(fā)生什么事情呢,?
   靜態(tài)成員肯定要出現(xiàn)在這個(gè)對(duì)象里面的,,對(duì)吧?這時(shí)候才去定義那個(gè)靜態(tài)成員嗎,?這顯然是不合適的,。
   因?yàn)椋热缬辛硗庖粋€(gè)線程也要?jiǎng)?chuàng)建該類的對(duì)象,,那么也要按照這個(gè)方式去定義那個(gè)靜態(tài)成員,。
   這會(huì)產(chǎn)生兩種可能的情況:
      A. 重復(fù)定義;
      B. 就算不產(chǎn)生重復(fù)定義的情況,,也會(huì)產(chǎn)生競(jìng)爭(zhēng),,從而造成死鎖的問題,以至于對(duì)象無(wú)法創(chuàng)建,。
         很顯然,,編譯器不能這么干。那么很合理的解決辦法,,就是事先在類的外部把它定義好,,然后再供所有的對(duì)象共享。
         當(dāng)然這樣做,,還是有可能產(chǎn)生線程安全的問題,,但不管怎么說(shuō)對(duì)象是創(chuàng)建好了,而這種線程安全問題,,可以在編程中予以解決,。


對(duì)于class的static data member,其實(shí)只是聲明了一個(gè)scope(還記得class::static_data_member中的::么,?),,
既然是聲明而已,所以還需要一個(gè)定義,
之所以需要在類的外面,,因?yàn)楸举|(zhì)來(lái)說(shuō)它和global和static變量沒什么區(qū)別,,都是在數(shù)據(jù)段的,只是scope不一樣,,屬于class而已,。

這里反映出了C/C++里面一些稍微偏底層的復(fù)雜的細(xì)微的概念,比如scope,,storage,,life time。
::是指scope,,是在class里面聲明的,,
static指storage,是和global一樣,,在外面定義的,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多