At least in standard C++, for anything you can make an array of (with length > 1), this will have to be true. If you have
Foo arr[2];
and alignof(Foo) > sizeof(Foo)
, then arr[0]
and arr[1]
can't both be aligned.
As Zalman Stern's example shows, though, at least some compilers will allow you to declare a type with alignment greater than its size, with the result that the compiler simply won't let you declare an array of that type. This is not standards-compliant C++ (it uses type attributes, which are a GCC extension), but it means that you can have alignof(T) > sizeof(T)
in practice.
The array argument assumes sizeof(Foo) > 0
, which is true for any type supported by the standard, but o11c shows an example where compiler extensions break that guarantee: some compilers allow 0-length arrays, with 0 sizeof
and positive alignof
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…