Построение элементов вектора по умолчанию
-
22-08-2019 - |
Вопрос
Читая ответы на это вопрос У меня возникли сомнения относительно конструкции объектов в векторе по умолчанию.Чтобы проверить это, я написал следующий тестовый код:
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}
- Если пользователь определял тип данных, то конструктор по умолчанию будет вызван.