Вопрос

Читая ответы на это вопрос У меня возникли сомнения относительно конструкции объектов в векторе по умолчанию.Чтобы проверить это, я написал следующий тестовый код:

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?разве это не должно быть мусором?

Это было полезно?

Решение

Он использует эквивалент конструктора по умолчанию для целых чисел, который инициализирует их нулевым значением.Вы можете сделать это явно:

int n = int();

установит n равным нулю.

Обратите внимание, что конструкция по умолчанию используется и требуется только в том случае, если вектору задан начальный размер.Если бы вы сказали:

vector <X> v;

нет требования, чтобы у X был конструктор по умолчанию.

Другие советы

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

Вектор в основном звонит default для типа, на который он указывает: Type()

  • Если это базовый тип данных, например, int, Double есть, то int (), double () {int () получит значение 0}
  • Если пользователь определял тип данных, то конструктор по умолчанию будет вызван.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top