Являются ли конструктор и деструктор по умолчанию когда-либо встроенными?

Мне любопытно, являются ли конструктор и деструктор по умолчанию, которые генерирует компилятор, встроенными или нет, потому что я могу обосновать это в любом случае. С одной стороны, вы хотите, чтобы конструктор / деструктор по умолчанию , а не был встроенным, чтобы их добавление позже не нарушило ABI (поскольку объектные файлы, скомпилированные, когда были только значения по умолчанию, вместо этого будут встроены сгенерированные определения того, что вы определяете). С другой стороны, для компилятора C ++ для компиляции кода C, который работает так же хорошо, как при компиляции с компилятором C, он не может добавлять вызовы конструктора / деструктора для каждой выделенной структуры, а в C ++ единственное функциональное различие между классом а структура должна быть защитой доступа по умолчанию. Может, компоновщик как-то с этим справится? Может быть, ответ варьируется в зависимости от компилятора?

Следствие этого вопроса: если у меня есть структура POD на C ++, могу ли я теоретически получить выгоду от некоторых компиляторов, определяя самостоятельно пустой встроенный конструктор / деструктор вместо значений по умолчанию?

9
задан Joseph Garvin 8 June 2011 в 03:47
поделиться