2009-05-18 89 views
6

在閱讀此question的答案時,我對向量中對象的默認構造有疑問。爲了測試它,我寫了下面的測試代碼:向量中元素的默認構造

struct Test 
{ 
    int m_n; 

    Test(); 

    Test(const Test& t); 

    Test& operator=(const Test& t); 
}; 

Test::Test() : m_n(0) 
{ 
} 

Test::Test(const Test& t) 
{ 
    m_n = t.m_n; 
} 

Test& Test::operator =(const Test& t) 
{ 
    m_n = t.m_n; 
    return *this; 
} 


int main(int argc,char *argv[]) 
{ 
    std::vector<Test> a(10); 
    for(int i = 0; i < a.size(); ++i) 
    { 
     cout<<a[i].m_n<<"\n"; 
    } 

    return 0; 
} 

果然,在創建矢量對象的測試結構默認構造函數被調用。但是我無法理解的是,STL是如何初始化對象的,我創建了一個基本數據類型的向量,例如int整型向量,因爲它有默認的構造函數。即矢量中的所有整數如何具有值0?它不應該是垃圾嗎?

回答

10

它使用ints的默認構造函數的等價物,它將零初始化爲零。你可以明確地做到這一點:

int n = int(); 

將會將n設置爲零。

請注意,默認構造僅在向量被賦予初始大小時才被使用和需要。如果你說:

vector <X> v; 

有沒有要求X有一個默認的構造函數。

+0

我們似乎已經在手了大量的時間,今天:) – xtofl 2009-05-18 13:21:33

1
std::vector<Type> a(10);  // T could be userdefined or basic data type 

矢量基本上調用default爲它指向類型:Type()

  • 如果是如int基本數據類型, 雙是否有則INT(),雙(){INT( )將得到值0}
  • 如果用戶定義了數據類型,則將調用默認的構造函數 。