C/C++在構造函數中對成員變量初始化的兩種方式


  今天看到一個構造函數,一下子有點懵了,今天就來復習構造函數為成員變量賦值的兩種方式吧。

CProtocol::CProtocol(UINT32 dwType) : m_dwType(dwType)
{
    m_message = NULL;
    m_sessionID = 0;
    m_debug = false;
    m_Compress = false;
}

  


首先要了解的是初始化成員變量的兩種方式:

class A{
public:
    int m_a;
    int m_b;
    A(int a,int b);

}
//采用初始化列表
A:A(int a,int b):m_a(a),m_b(b){

}
//采用構造函數內賦值
A:A(int a,int b){
    m_a = a;
    m_b = b;
}

可以看到成員變量初始化的兩種方式:采用初始化列表/采用構造函數內賦值的方式是比較明顯的。而前面我們看到的就是這兩種形式一起用的一種場景。

 

要注意的是,成員變量的初始化順序與初始化列表中列出的變量的順序無關,它只與成員變量在類中聲明的順序有關。請看代碼:

A:A(int b):m_b(b),m_a(m_b){

}
//運行結果: 2130567168, 100

可以看到的是,雖然從初始化列表的順序是b先賦值給m_b然后m_b賦值給m_a。但初始化列表初始化的順序是和聲明的順序有關的,實際上是m_a先被為賦值的m_b初始化了。

 


免責聲明!

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



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