向量中元素的默认构造

Nav*_*een 6 c++ stl default-constructor built-in-types

在阅读这个问题的答案时,我对向量中对象的默认构造产生了疑问.为了测试它,我编写了以下测试代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

当然,在创建矢量对象时会调用Test结构默认构造函数.但是我无法理解的是STL如何初始化对象我创建了一个基本数据类型的向量,例如int的向量,因为它有默认的构造函数?即向量中的所有整数如何具有值0?不应该是垃圾吗?

小智 10

它使用了int的默认构造函数的等价物,即零初始化它们.你可以明确地做到:

int n = int();
Run Code Online (Sandbox Code Playgroud)

将n设置为零.

请注意,仅当向量具有初始大小时,才使用默认构造并且必需.如果你说:

vector <X> v;
Run Code Online (Sandbox Code Playgroud)

不要求X具有默认构造函数.