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