у структур действительно есть конструктор по умолчанию, при тех же обстоятельствах, что и у классов.
Между прочим, структура - это не «класс, в котором все открыто». Это класс с 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.
person
Steve Jessop
schedule
30.10.2008