Я экспериментировал с двоичными файлами, сгенерированными с помощью компилятора ARM G CC (версия 9.2.1). Я заметил, что даже если я скомпилировал программу с поддержкой C ++ 14, мягкие правила для типов POD не используются для помещения определения структуры в раздел rodata.
Например:
struct DigitalOut
{
uint32_t port;
uint32_t pin;
uin32_t output_type;
uint32_t output_speed;
}
Эта версия помещается в секцию rodata, если она создается с использованием инициализаторов скобок.
Однако, если я введу конструктор speci c для структуры, как показано ниже, то она не будет помещена в секцию rodata
struct DigitalOut
{
DigitalOut() = default;
DigitalOut(uint32_t port, uint32_t pin) :
port{port},
pin{pin},
output_type{500} //just an example
output_speed{400} {}
uint32_t port;
uint32_t pin;
uin32_t output_type;
uint32_t output_speed;
}
Что мне здесь не хватает? Я почти уверен, что понимаю обновленное определение C ++ для типов POD, тривиально конструируемых и копируемых классов и стандартных макетов.
Ссылка на ответ, относящийся к обновленным определенным типам POD
Редактировать:
Мой вопрос касается того, почему компилятор не может этого сделать? Может ли это быть отсутствующей функцией в компиляторе или я что-то не так делаю?