看看这三个类(包括省略):
template<class T> struct A {
std::allocator<T> allocator;
T* ptr;
};
template<class T> struct B {
T* ptr;
std::allocator<T> allocator;
};
template<class T> struct C : std::allocator<T> {
T* ptr;
};
int main(int argc, char **argv) {
std::cout << "A: " << sizeof(A<int>) << "\n";
std::cout << "B: " << sizeof(B<int>) << "\n";
std::cout << "C: " << sizeof(C<int>) << "\n";
}
如果您问我,根据对齐方式,要么A
或B
必须具有与C
. 但是,以其他方式打印sizeof
声明:
A: 16
B: 16
C: 8
为什么会这样?