第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C ++中定義靜態(tài)成員

在C ++中定義靜態(tài)成員

C++
牛魔王的故事 2019-08-19 16:51:04
在C ++中定義靜態(tài)成員我試圖定義一個這樣的公共靜態(tài)變量:public :          static int j=0;        //or any other value too我在這一行得到了一個編譯錯誤:ISO C ++禁止非const靜態(tài)成員`j'的類內(nèi)初始化。為什么在C ++中不允許這樣做?為什么允許const成員初始化?這是否意味著C ++中的靜態(tài)變量沒有像C一樣用0初始化?謝謝 !
查看完整描述

3 回答

?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

(1.)為什么C ++中不允許這樣做?

來自Bjarne Stroustrup的C ++風格和技巧常見問題解答

類通常在頭文件中聲明,并且頭文件通常包含在許多翻譯單元中。但是,為避免復雜的鏈接器規(guī)則,C ++要求每個對象都有唯一的定義。如果C ++允許將需要作為對象存儲在內(nèi)存中的實體的類內(nèi)定義,則該規(guī)則將被破壞。

(2.)為什么允許const成員初始化?

[ dirkgently說它更好 ]

(3.)這是否意味著C ++中的靜態(tài)變量沒有像C一樣用0初始化?

據(jù)我所知,只要你在.cpp中聲明靜態(tài)成員var,如果你沒有另外指定,它將被零初始化:

// in some .cppint Test::j; // j = int();


查看完整回答
反對 回復 2019-08-19
?
慕哥9229398

TA貢獻1877條經(jīng)驗 獲得超6個贊

為什么在C ++中不允許這樣做?

除非您定義它,否則該變量不會成為l值。

為什么允許const成員初始化?

即使在這種情況下,如果要獲取變量的地址,也需要定義。

9.4.2靜態(tài)數(shù)據(jù)成員

2在類定義中聲明靜態(tài)數(shù)據(jù)成員不是定義,除了cv-qualified void之外,它可能是不完整的類型。靜態(tài)數(shù)據(jù)成員的定義應出現(xiàn)在包含成員類定義的命名空間范圍內(nèi)。在命名空間作用域的定義中,靜態(tài)數(shù)據(jù)成員的名稱應使用::運算符通過其類名限定。靜態(tài)數(shù)據(jù)成員定義中的初始化表達式在其類的范圍內(nèi)

此外,這主要是一個使用工件,所以你可以寫:

class S {
      static const int size = 42;
      float array[ size ];};

這是否意味著C ++中的靜態(tài)變量沒有像C一樣用0初始化?

不,是他們:

3.6.2非局部變量的初始化

在進行任何其他初始化之前,具有靜態(tài)存儲持續(xù)時間(3.7.1)或線程存儲持續(xù)時間(3.7.2)的變量應為零初始化(8.5)。

雖然事情在C ++ 0x中變得更加棘手。現(xiàn)在可以初始化所有文字類型(而不是當前標準中的整數(shù)類型),這意味著現(xiàn)在可以使用聲明中的初始化程序初始化所有標量類型(包括浮點數(shù))和某些類類型。


查看完整回答
反對 回復 2019-08-19
  • 3 回答
  • 0 關(guān)注
  • 674 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號