Есть старый пост с просьбой создать конструкцию, для которой sizeof
вернет 0
. Есть несколько ответов с высокими оценками от пользователей с высокой репутацией, в которых говорится, что по стандарту ни один тип или переменная не может иметь размер 0. И я согласен с этим на 100%.
Однако есть этот новый ответ, в котором представлено это решение:
struct ZeroMemory {
int *a[0];
};
Я как раз собирался проголосовать и прокомментировать его, но время, проведенное здесь, научило меня проверять даже то, в чем я уверен на 100%. Итак... к моему удивлению, и gcc
, и clang
показывают одинаковые результаты: sizeof(ZeroMemory) == 0
. Более того, размер переменной равен 0
:
ZeroMemory z{};
static_assert(sizeof(z) == 0); // Awkward...
Чтоооо...?
Как это возможно?
struct polygon { int count; POINT sides[0];}; struct { struct polygon poly; POINT pts[3]; } myTriangle = { {3}, {{1,1},{2,2},{2,1} };
. Нужно соблюдать осторожность, чтобы выравнивание не вызывало проблем, но могут быть объекты статической продолжительности разного размера, которые можно обрабатывать взаимозаменяемо. 12.07.2019