Структуры
имеют конструктор по умолчанию, точно так же, как классы.
Кстати, структура не является "классом со всем открытым". Это класс с public как спецификатор доступа по умолчанию. Структуры могут иметь закрытых членов, но ваш рецензент кода может ударить вас, если они это сделают.
Соответствующая проблема не структура против класса, это POD против не POD.
Помните, как элемент "int" класса неинициализирован, если вы не зададите ему значение в списке инициализатора или не установите значение в конструкторе? Ну, то же самое относится ко всем типам POD. Конструктор по умолчанию для структуры POD (или класса POD в этом отношении) не имеет ничего общего. Таким образом, хотя он номинально существует, компилятор не должен его генерировать и вызывать.
Это означает, что конструктор по умолчанию для любого типа, который вы могли бы определить в C, не должен вводить издержки времени выполнения при использовании в C ++. На практике ходят слухи, что не все компиляторы C ++ применяют достаточную оптимизацию, чтобы гарантировать, что весь код всегда генерирует двоичный файл так же хорошо, как если бы он был скомпилирован как C. Но я не знаю, является ли это когда-либо одной из проблем, вызывающих проблемы - я предполагаю, что это обычно идентично.
Итак, учитывая структуру POD:
struct sPOD {
int foo;
float bar;
char baz[23];
};
Следующее, скорее всего, не выдаст код в C ++ (кроме, возможно, перемещения указателя стека, в зависимости от того, сколько компилятор свернет автоматические переменные вместе), как в C:
sPOD s1;
На самом деле это не для меня на GCC.