Duyệt nguồn DMD, có vẻ như alignof
không tính đến các thuộc tính align
.
Đây là nơi nó được xử lý:
... if (ident == Id::__xalignof)
{
e = new IntegerExp(loc, alignsize(), Type::tsize_t);
}
này chuyển đổi một biểu thức .alignof
thành một biểu size_t
với giá trị alignsize()
, vì vậy chúng ta hãy nhìn vào alignsize()
cho một mảng tĩnh:
unsigned TypeSArray::alignsize()
{
return next->alignsize();
}
Nó chỉ được căn chỉnh của loại phần tử (void
) trong trường hợp của bạn.
void
được xử lý bởi TypeBasic::alignsize()
, mà chỉ về phía trước để TypeBasic::size(0)
switch (ty)
{
...
case Tvoid:
size = 1;
break;
...
}
Nhìn vào cách các loại xử lý alignof
, nó không giống như align
thuộc tính được đưa vào tính toán ở tất cả, nhưng tôi có thể là sai . Nó có thể là giá trị kiểm tra sự liên kết bằng tay.
Nguồn
2012-05-19 11:49:08
lol chờ đợi để 'align' làm gì? Có phải chỉ để trang trí? xD – Mehrdad
Tôi nghĩ rằng 'align' hoạt động, nhưng' alignof' chỉ nhận được sự liên kết của loại, vì vậy chúng là những thứ riêng biệt. –
Thật lạ lùng, tôi đã gặp phải những vấn đề khiến tôi kiểm tra 'alignof' ... phải kiểm tra lại .. – Mehrdad