向量中元素的默认构造

2024-01-09

在阅读此问题的答案时question https://stackoverflow.com/questions/877385/dynamically-allocating-and-setting-to-zero-an-array-of-floats我对向量中对象的默认构造有疑问。为了测试它,我编写了以下测试代码:

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 如何初始化我创建基本数据类型向量(例如整数向量)的对象,因为它有默认构造函数?即向量中的所有整数如何值为 0?不应该是垃圾吗?


它使用与 int 的默认构造函数等效的功能,即对它们进行零初始化。你可以明确地做到这一点:

int n = int();

将把 n 设置为零。

请注意,只有在给定向量初始大小的情况下才使用和需要默认构造。如果你说:

vector <X> v;

不要求 X 有默认构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向量中元素的默认构造 的相关文章

随机推荐