我不明白在下面的代码中将char buffer []与X类型的对象对齐的原因

Bel*_*loc 6 c++ memory-alignment c++11

第151页的新书中的Stroustrup显示了以下使用类型说明符的示例alignas:

有时,我们必须在声明中使用对齐,其中不允许使用诸如alignof(x + y)之类的表达式.相反,我们可以使用类型说明符alignas:alignas(T)表示"就像T一样对齐" 例如,我们可以为某些类型X预留未初始化的存储,如下所示:

void user(const vector<X>& vx)
{
    constexpr int bufmax = 1024;
    alignas(X) char buffer[bufmax];    // unitialized
    const int max = min(vx.size(), bufmax/sizeof(X));
    unitialized_copy(vx.begin(), vx.begin() + max, buffer);
    ...
}
Run Code Online (Sandbox Code Playgroud)

sjd*_*ing 1

缓冲区是类型的char,因此将对齐,char但他实际上想要存储X在其中,并且X可能需要不同的对齐方式char,因此alignas说明符允许他确保它与X对象正确对齐。