[英]Default construction of elements in a vector
在閱讀這個問題的答案時,我對向量中對象的默認構造產生了疑問。 為了測試它,我編寫了以下測試代碼:
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;
}
當然,在創建矢量對象時會調用Test結構默認構造函數。 但是我無法理解的是STL如何初始化對象我創建了一個基本數據類型的向量,例如int的向量,因為它有默認的構造函數? 即向量中的所有整數如何具有值0? 不應該是垃圾嗎?
它使用了int的默認構造函數的等價物,即零初始化它們。 你可以明確地做到:
int n = int();
將n設置為零。
請注意,僅當向量具有初始大小時,才使用默認構造並且必需。 如果你說:
vector <X> v;
不要求X具有默認構造函數。
std::vector<Type> a(10); // T could be userdefined or basic data type
Vector基本上調用它指向的類型的default
: Type()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.