std::aligned_storage
结构提供type
typedef,至少根据cppreference:
提供成员typedef类型,它是适合使用的PODType 作为任何大小最多为Len和的对象的未初始化存储空间 其对齐要求是Align的除数。
Align的默认值是最严格的(最大的) 任何大小最多为Len的对象的对齐要求。
特别是,使用默认值Align
,适当地对齐任何对象,其大小最多为Len。
请注意,对于过度对齐的类型没有任何警告或例外(在任何情况下,我使用的平台,gcc,至少支持一些过度对齐的类型)。
这样的实施如何实际运作?满足"任何对象的要求"它似乎会:
alignof(T) <= sizeof(T)
类型T
的平台上,需要始终与大约Len
个字节对齐,因为大小为Len
的对象可以对齐Len
。当然,这会为大Len
!alignof(T)
可能大于sizeof(T)
的平台上,我根本不知道如何实施。{li>但是,这种类型甚至不存在clear to me。基于my testing,对于默认Align
值,gcc
总是与16对齐,而不管len。这意味着存储不适用于任何对象,但只适用于基本对齐的对象(此平台上为alignof(max_align_t) == 16
)。
答案 0 :(得分:2)