最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 成員變量的初始化順序問題詳解

 更新時(shí)間:2017年02月23日 08:35:07   投稿:lqh  
這篇文章主要介紹了C++ 成員變量的初始化順序問題詳解的相關(guān)資料,需要的朋友可以參考下

C++ 成員變量的初始化順序問題詳解

問題來源:

由于面試題中,考官出了一道簡單的程序輸出結(jié)果值的題:如下,


class A 
{ 
private: 
 int n1; 
 int n2; 
  
public: 
 A():n2(0),n1(n2+2){} 
 
 void Print(){ 
  cout << "n1:" << n1 << ", n2: " << n2 <<endl; 
 } 
}; 
 
int main() 
{ 
 
 A a; 
 a.Print(); 
 
 return 1; 
} 
 

 這時(shí),那個(gè)考生這樣回答:n1是2,n2是0。

在我電腦輸出結(jié)果為:

如果你也這樣回答,那么你肯定不懂初始化成員列表的順序。

如果我把A類中構(gòu)造函數(shù)改成:

A() 
{ 
 n2 = 0; 
 n1 = n2 +2; 
} 
 

那么此時(shí)輸出結(jié)果為:

 

分析:   

1、成員變量在使用初始化列表初始化時(shí),與構(gòu)造函數(shù)中初始化成員列表的順序無關(guān),只與定義成員變量的順序有關(guān)。因?yàn)槌蓡T變量的初始化次序是根據(jù)變量在內(nèi)存中次序有關(guān),而內(nèi)存中的排列順序早在編譯期就根據(jù)變量的定義次序決定了。這點(diǎn)在EffectiveC++中有詳細(xì)介紹。

2、如果不使用初始化列表初始化,在構(gòu)造函數(shù)內(nèi)初始化時(shí),此時(shí)與成員變量在構(gòu)造函數(shù)中的位置有關(guān)。

3、注意:類成員在定義時(shí),是不能初始化的

4、注意:類中const成員常量必須在構(gòu)造函數(shù)初始化列表中初始化。

5、注意:類中static成員變量,必須在類外初始化。

6、靜態(tài)變量進(jìn)行初始化順序是基類的靜態(tài)變量先初始化,然后是它的派生類。直到所有的靜態(tài)變量都被初始化。這里需要注意全局變量和靜態(tài)變量的初始化是不分次序的。這也不難理解,其實(shí)靜態(tài)變量和全局變量都被放在公共內(nèi)存區(qū)。可以把靜態(tài)變量理解為帶有“作用域”的全局變量。在一切初始化工作結(jié)束后,main函數(shù)會被調(diào)用,如果某個(gè)類的構(gòu)造函數(shù)被執(zhí)行,那么首先基類的成員變量會被初始化。  

bbb的成員變量定義:
private:
int n1;
int n2;
bbb的構(gòu)造函數(shù):
bbb::bbb()
:n2(1),
n1(2)
{
}

匯編代碼:

00401535 mov eax,dword ptr [ebp-4]
00401538 mov dword ptr [eax+4],2
0040153F mov ecx,dword ptr [ebp-4]
00401542 mov dword ptr [ecx+8],1

然后依照派生鏈初始化派生類的成員函數(shù)。

總結(jié):

   變量的初始化順序就應(yīng)該是:

1 基類的靜態(tài)變量或全局變量
2 派生類的靜態(tài)變量或全局變量
3 基類的成員變量
4 派生類的成員變量

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • C++ COM編程之什么是組件?

    C++ COM編程之什么是組件?

    這篇文章主要介紹了COM編程之什么是組件?COM組件是以Win32動態(tài)鏈接庫(DLLs)或可執(zhí)行文件(EXEs)的形式發(fā)布的可執(zhí)行代碼,需要的朋友可以參考下
    2014-10-10
  • C++中的強(qiáng)制類型轉(zhuǎn)換操作詳解

    C++中的強(qiáng)制類型轉(zhuǎn)換操作詳解

    C++中提供了四種強(qiáng)制類型轉(zhuǎn)換技術(shù):static_cast、dynamic_cast、reinterpret_cast和const_cast。這些技術(shù)能夠在需要時(shí)將一種類型轉(zhuǎn)換為另一種類型,但需要注意它們的適用條件和安全性。程序員需要根據(jù)具體情況選擇合適的強(qiáng)制類型轉(zhuǎn)換方式,以確保程序的正確性和可靠性
    2023-04-04
  • C語言初識變量常量字符串轉(zhuǎn)義符及注釋方式簡介

    C語言初識變量常量字符串轉(zhuǎn)義符及注釋方式簡介

    最強(qiáng)的C語言筆記,此處對于C語言的基礎(chǔ)部分做一個(gè)簡要的介紹,作者實(shí)屬初學(xué),寫博客也是作者學(xué)習(xí)的一個(gè)過程,若文中內(nèi)容有理解不到位或者有不當(dāng)之處,還請朋友們不吝指正
    2021-11-11
  • C語言詳解UDP通信的實(shí)現(xiàn)

    C語言詳解UDP通信的實(shí)現(xiàn)

    UDP協(xié)議是用戶數(shù)據(jù)報(bào)協(xié)議,面向無連接的、不穩(wěn)定、不可靠、不安全的數(shù)據(jù)報(bào)傳遞---更像是是收發(fā)短信;UDP傳輸不需要建立連接,傳輸效率更高,在穩(wěn)定的局域網(wǎng)內(nèi)環(huán)境相對可靠;UDP天然支持多客戶端
    2022-05-05
  • Qt中實(shí)現(xiàn)多線程導(dǎo)出數(shù)據(jù)功能的四種方式小結(jié)

    Qt中實(shí)現(xiàn)多線程導(dǎo)出數(shù)據(jù)功能的四種方式小結(jié)

    在以往的項(xiàng)目開發(fā)中,在很多地方用到了多線程,本文將記錄下在Qt開發(fā)中用到的多線程技術(shù)實(shí)現(xiàn)方法,以導(dǎo)出指定范圍的數(shù)字到txt文件為例,展示多線程不同的實(shí)現(xiàn)方式
    2025-08-08
  • C/C++程序鏈接與反匯編工具objdump的使用介紹

    C/C++程序鏈接與反匯編工具objdump的使用介紹

    這篇文章主要介紹了C/C++程序鏈接與反匯編工具objdump的使用,程序構(gòu)建過程的第二個(gè)階段就是鏈接,鏈接過程輸入的是目標(biāo)文件的集合。每個(gè)目標(biāo)文件可以被看作單個(gè)源代碼文件的二進(jìn)制存儲版本
    2023-02-02
  • C++實(shí)現(xiàn)HTTP服務(wù)的示例代碼

    C++實(shí)現(xiàn)HTTP服務(wù)的示例代碼

    本文主要介紹了C++實(shí)現(xiàn)HTTP服務(wù)的示例代碼,C++ HTTP,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 通俗易懂的C++前綴和與差分算法圖文示例詳解

    通俗易懂的C++前綴和與差分算法圖文示例詳解

    這篇文章主要為大家非常通俗易懂的講解了C++前綴和與差分算法的圖文分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • C++設(shè)計(jì)模式之Static Factory模式詳解

    C++設(shè)計(jì)模式之Static Factory模式詳解

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之Static Factory模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)哈希表詳解

    C語言數(shù)據(jù)結(jié)構(gòu)哈希表詳解

    哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過把關(guān)鍵碼映射的位置去尋找存放值的地方,說起來可能感覺有點(diǎn)復(fù)雜,我想我舉個(gè)例子你就會明白了,最典型的的例子就是字典
    2022-02-02

最新評論

丰镇市| 建瓯市| 阳山县| 甘洛县| 中超| 五华县| 达孜县| 长丰县| 吉安市| 竹山县| 巩义市| 临江市| 哈尔滨市| 惠安县| 齐河县| 滁州市| SHOW| 天全县| 武陟县| 南岸区| 梓潼县| 朝阳市| 沾益县| 湘潭市| 保靖县| 柏乡县| 许昌市| 潼关县| 武乡县| 新宁县| 宁德市| 宣化县| 东丽区| 泰州市| 云阳县| 黔东| 乐陵市| 龙游县| 临桂县| 清水县| 商洛市|