2012-06-22 255 views
6

_currentHandle()的意思是什麼?帶空初始化的構造函數初始化列表

template<class SpiHandleT> 
class SpiHandleIterator : public ISpiHandleIterator<SpiHandleT> 
{ 
public: 
    SpiHandleIterator() : _currentHandle() 
    { 
    } 
    ... 
protected: 
    SpiHandleT _currentHandle; 
}; 

回答

17

這稱爲值初始化。從C++ 03標準§8.5/ 7:

對象的初始值爲一組空括號,即(),應進行值初始化。

而從第8.5節/ 5:

值初始化T類型的對象是指:

  • 如果T是一個類類型與用戶聲明的構造,那麼將調用T的默認構造函數(如果T沒有可訪問的默認構造函數,則初始化不合格);
  • 如果T是沒有一個用戶聲明的構造的非聯合類型,那麼T每個非靜態數據成員和基礎類組分是值初始化;
  • 如果T是一個數組類型,那麼每個元素都是值初始化的;
  • 否則,該目的是零初始化

零初始化T類型的對象是指:

  • 如果T是標量類型,對象被設置爲值的0(零)轉換爲T;
  • 如果T是非聯合類類型,則每個非靜態數據成員和每個基類子對象都被零初始化;
  • 如果T是聯合類型,所述對象的第一命名的數據成員)是零初始化;
  • if T是一個數組類型,每個元素都是零初始化的;
  • 如果T是引用類型,則不執行初始化。
你的情況

所以,這取決於SpiHandleT定義:

  • 如果它是一個標量,這將是零初始化
  • 如果它是一個類類型沒有一用戶聲明的構造函數,它的子對象將(遞歸)值初始化
  • 如果它是一個類類型用戶聲明的構造函數,它將被默認構建