2011-06-03 169 views
3

我幾乎不認識C++,不是專家。C++初始化列表

我正在查看已有的代碼。 我無法理解下面的代碼。

typedef enum 
{ 
    eEvent_MsgOk,    
    eEvent_InvalidMsgId,  
    eEvent_Failure,   
} eEventType; 

class Rs232Event 
{ 
public: 
    Rs232Msg*  m_pMsg;  
    eEventType  m_eEvent; 

} 
Rs232Event::Rs232Event(eEventType eEvent,Rs232Msg* pMsg) 
: m_pMsg(pMsg), m_eEvent(eEvent) 
{ 
    // not implemented on purpose 
} 

這裏使用初始化列表他們初始化值。

但是Rs232Msg類沒有單參數化構造函數。

但它有一個接受4個參數的構造函數。

我無法確定它是如何被調用的。但是代碼運行時沒有任何錯誤。

+0

謝謝大家給我解釋一下it.But m_eEvent不是一個指針。它是一個枚舉變量。這裏和你所有人都告訴我變量eEvent被複制到m_eEvent.Is一樣,我在想什麼是正確的? – 2011-06-03 14:45:40

+0

C++中的枚舉只是整數值。您的案例中的'm_eEvent'只是價值初始化的。 – 2011-06-03 15:09:36

回答

6

m_pMsg不是Rs232Msg類。相反,它的一個指針Rs232Msg類。所有正在被複制的是一個指向該類的已經存在的實例的指針,所以這裏的構造函數沒有被調用。

1

m_pMsgpMsg指向Rs232Msg,所以Rs232Msg構造函數沒有被調用;你只是存儲一個指向預先存在的實例的指針。