Заполнение не является частью определенного поля, оно является частью самой структуры. Если у меня есть структура, как
struct foo {
T1 v1;
// <--- some padding here (A)
T2 v2;
// <--- some padding here (B)
T3 v3;
};
Является ли A отступной частью v1? v2 ?. B является частью v2? v3? Если вас беспокоит запутывание заполнения при выполнении таких вещей, как сохранение структуры в файл или тому подобное, большинство (все?) Компиляторов имеют механизм, позволяющий отключить заполнение структуры даже на основе структуры за структурой. Чтобы узнать размер последнего члена вашей структуры, в этом случае s
, используйте sizeof
, например
struct a tmp;
size_t size = sizeof(tmp.s);
Если вы не хотите создавать временный файл, вы можете воспользоваться тем, что sizeof происходит во время компиляции, ничего не делает во время выполнения и делает что-то вроде:
namespace {
const a& dummy_func();
}
size_t size = sizeof(dummy_func().s);
Пустой функционал не нужно реализовывать никогда.
Другой вариант -
struct a {
...
typedef char s_type[255];
s_type s;
};
size_t size = sizeof(a::s_type);