请考虑以下代码:
class Foo
{
...
};
template <class T>
class Bar
{
T t;
};
是否保证sizeof(Foo) == sizeof(Bar<Foo>)
始终在任何标准C ++编译器中评估为true
?
是否存在上述情况永远不会成立的情况?
答案 0 :(得分:5)
我认为该标准不能保证 - 实现可以在Bar
结束时自由添加填充。
但很难理解为什么任何真正的实现都会在Bar
结束时添加填充,而不是Foo
。除非,例如,Foo
明确给出了一些非默认对齐(例如字节对齐);然后将Bar
填充到默认路线。