我正在阅读关于C++中对齐的内容,但我不确定为什么仅包含char
数组成员的类的对齐方式不是数组的sizeof
,而总是为1。例如:
#include <iostream>
struct Foo{char m_[16];}; // shouldn't this have a 16 byte alignment?!
int main()
{
std::cout << sizeof(Foo) << " " << alignof(Foo);
}
从上面的代码中可以清楚地看出,sizeof(Foo)
是 16,但是它的对齐方式是 1,可以看到代码的输出结果。
为什么在这种情况下 alignof(Foo)
是 1 呢?
请注意,如果我将 char m_[16];
替换为像 int m_;
这样的基本类型,那么 alignof(Foo)
就会变成我所期望的,即 sizeof(int)
(在我的机器上,这是 4)。
如果我只是声明一个数组 char arr[16];
,那么 alignof(arr)
也将是 1。
m_
是一个数组,而不是指针。 - chris