Используйте alignas для выравнивания структуры
В следующей структуре:
struct alignas(?) test
{
int32_t f1; // 4 bytes
int8_t f2; // 1 byte
int8_t f3; // 1 byte
};
Как пользоваться alignas
чтобы sizeof(test)
будет ровно 6 байт?
alignas(1)
не принимается компилятором (gcc, msvc, clang) (ошибка вроде: error: requested alignment is less than minimum alignment of 4 for type 'test'
).
UPD. Этот вариант работает нормально, конечно:
#pragma pack(push, 1)
struct alignas(?) test
{
int32_t f1; // 4 bytes
int8_t f2; // 1 byte
int8_t f3; // 1 byte
};
#pragma pack(pop)
Но есть ли способ сделать это без препроцессора, используя только стандартный C++11/14?
1 ответ
Решение
Нет. alignas
только позволяет сделать выравнивание более строгим, и только до максимального выравнивания стандартных типов.
Стандарт не предусматривает механизма смещения типов.