Przeglądając źródło DMD, wygląda na to, że alignof
nie uwzględnia atrybutów align
.
Oto gdzie jest obsługiwane:
... if (ident == Id::__xalignof)
{
e = new IntegerExp(loc, alignsize(), Type::tsize_t);
}
ten konwertuje wyrażenie .alignof
w size_t
wyrażenia z wartością alignsize()
, więc spójrzmy na alignsize()
do statycznej tablicy:
unsigned TypeSArray::alignsize()
{
return next->alignsize();
}
po prostu pobiera wyrównanie typu elementu (void
) w twoim przypadku.
void
jest obsługiwane przez TypeBasic::alignsize()
, który tylko przekazuje do TypeBasic::size(0)
switch (ty)
{
...
case Tvoid:
size = 1;
break;
...
}
Patrząc jak inne rodzaje obsłużyć alignof
, to nie wygląda align
atrybuty są uwzględnione w ogóle, ale mogę się mylić . Może warto przetestować wyrównanie ręcznie.
lol czekaj, co robi 'align'? Czy to tylko dekoracja? xD – Mehrdad
Myślę, że 'align' działa, ale' alignof' po prostu dostaje wyrównanie typu, więc są oddzielnymi rzeczami. –
Dziwne, natknąłem się na problemy, które doprowadziły mnie do sprawdzenia "alignof" ... muszę jednak sprawdzić dwukrotnie .. – Mehrdad