Просто напишите конструктор по умолчанию для person
, предполагая, что это struct
или class
. Он будет вызываться для инициализации каждого элемента массива автоматически.
В общем, вы, вероятно, предпочтете вместо этого использовать std::vector<person>
, но вы не дали достаточного контекста, чтобы сказать наверняка.
конструктор по умолчанию будет выглядеть примерно так: (обратите внимание, что std::string
имеет свой собственный конструктор по умолчанию, так что нам не нужно ничего делать для этого)
struct person {
std::string name;
int value;
person() : value(0) {}
};
Теперь это:
person a[5];
правильно инициализирован без дополнительных усилий.
Если вы планируете инициализировать элементы «правильно» позже в любом случае, а затем с помощью вектора делает его легче пропустить неиспользуемого фиктивный инициализации:
struct person {
std::string name;
int value;
person() : value(0) {}
person(std::string const &n, int v) : name(n), value(v) {}
};
std::vector<person> people;
people.reserve(5);
// just create each person with the right values in the first place:
for (int i = 0; i < 5; ++i) {
people.push_back(person(get_name(i), get_value(i)));
}
Наконец, если вы не против иметь неинициализированную память, ваша первая версия (без конструктора и без цикла) в порядке. Тем не менее, обратите внимание, что потеря отслеживания того, какие элементы/члены действительны и которые являются мусором, является плодородным источником ошибок.
'человек [5]' является шестой позиция FYI – 2013-03-14 16:39:59
это действительно зависит от деталей самой структуры. И то, чего вы хотите достичь, конечно. – juanchopanza