Я читал, что std::vector
всегда инициализирует свои объекты своими default values
, скажем, для int
, это 0
. То же самое должно быть применимо даже для classes
, где вызывается default constructor
. Однако результаты, показанные в программе испытаний немного отличаются: -std :: вектор инициализации члена класса
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
int i;
A(){};
};
class B
{
public:
int i;
B() = default;
};
template <typename T>
void seev (const vector<T> &v)
{
for (auto &x:v)
{
cout << x.i << ' ';
}
cout << '\n';
}
int main()
{
vector<int> vi(5); // just to show that std::vector always default initializes values & hence int will be 0 here
vector<A> va(5);
vector<B> vb(5);
for (auto x: vi)
cout << x << ' ';
cout << '\n';
seev (va);
seev (vb);
return 0;
}
Выход: -
0 0 0 0 0
8854016 0 8847696 0 8854016
0 0 0 0 0
Мой вопрос почему значение члена i
неопределенными для A
& не B
? Какая разница сделал constructor
подписи: -
A() {}
&
B() = default;
сделать?
Конструктор 'default' не означает конструктор _empty_. – YSC