Рассмотрим следующую структуру данных:Как вычислить значение времени компиляции, используя размер членов профсоюзов?
union LambdaBox {
struct {
uint64_t full;
char lambda[];
} data;
char padding[64];
};
Размер переменной-члена full
четко известно во время компиляции.
Как с этим обращаться напрямую без предварительного создания объекта типа LambdaBox
?
Более конкретно, я пытаюсь написать выражение (оцениваемое во время компиляции), которое семантически эквивалентно третьему утверждению ниже.
int main(){
// This works
printf("The total size allowed is %zu\n", 56L);
// This also works
printf("The total size of LambdaBox is %zu\n", sizeof(LambdaBox));
// What is the correct syntax for the semantic meaning of the following line?
printf("The total size allowed is %zu\n", sizeof(LambdaBox) -
sizeof(LambdaBox::data::full);
}
Я смущен вашим последним комментарием. Вы говорите, что это решение будет * не * работать с C++? – merlin2011
Я говорю, что массив-элемент без длины не является основным C++, но C99. Тем не менее, он принят как расширение многими реализациями, поэтому вы можете использовать его. – Deduplicator
О, я вижу. Спасибо за уточнение. – merlin2011