Consider the code below:

class Foo
{
    ...
};

template <class T>
class Bar
{
    T t;
};

Is it guaranteed that sizeof(Foo) == sizeof(Bar<Foo>) always evaluates to true across any standard C++ compiler?

Are there any situations in which the above condition would never be true?

有帮助吗?

解决方案

I don't believe the standard makes that guarantee - an implementation is free to add padding at the end of Bar.

But it's hard to see why any real implementation would add padding at the end of Bar but not Foo. Unless, say, Foo was explicitly given some non-default alignment (e.g. byte aligned); Bar would then be padded to the default alignment.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top