发新话题
打印

很好奇,STL 里面的 那么多 XXX::value,会不会增加对象大小?

很好奇,STL 里面的 那么多 XXX::value,会不会增加对象大小?

在 STL 的很多模板中,都用到了 ::value, 很好奇,这些为模板匹配服务的标志,会不会增加对象的大小,测试一下,最常见的
class C : std::true_type
{
}

size_t base = sizeof true_type; // true_type 为1
size_t derived = sizeof C ;// C大小为1

实际上 std::true_type,是一个空对象, 其简化的定义如下:
struct true_type
{
     static const bool value=true; // 是一个静态常量,不占对象任何内存
}

但空对象,为什么会有一个字节? 因为c++ 规定,每个类对象,必须至少一个字节用来占位,为什么?让大师来回答你: http://www.stroustrup.com/bs_faq2.html#sizeof-empty

因此,C报1字节,它也是一个空对象,一个类本身为空,基类为空,但经优化,类仍然为1字节,而不是2字节。

TOP

发新话题