5

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

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

4

2 回答 2

10

它使用等效于 int 的默认构造函数,即将它们初始化为零。你可以明确地做到这一点:

int n = int();

将 n 设置为零。

请注意,仅在给定向量初始大小时才使用和需要默认构造。如果你说:

vector <X> v;

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

于 2009-05-18T13:19:47.183 回答
1
std::vector<Type> a(10);        // T could be userdefined or basic data type

Vector 基本上要求default它指向的类型: Type()

  • 如果是基本数据类型,如 int, double 则 int(), double() { int() 将得到值 0}
  • 如果用户定义的数据类型,则默认构造函数将被调用。
于 2009-05-18T13:27:16.387 回答