为什么std :: list在c ++ 11上更大?

时间:2012-04-08 18:01:36

标签: c++ gcc c++11 c++98

使用此代码:

#include <iostream>
#include <list>

int main() {
    std::cout << sizeof(std::list<void*>) << std::endl;
};

我注意到在GCC 4.7上,C ++ 98上std::list<void*>的大小为16字节,而C ++ 11上的大小为24字节。

我想知道std :: list上有什么变化让它更大了。

1 个答案:

答案 0 :(得分:42)

C ++ 11要求list::size()在恒定时间内执行。海湾合作委员会通过adding the size as a data member使这成为可能。 GCC没有为C ++ 98模式这样做,因为这会破坏二进制兼容性。

不要将在C ++ 98模式下编译的代码与在C ++ 11模式下编译的代码混合使用。它不起作用。

更新:显然,海湾合作委员会的人改变了主意,而C ++ 11的一致性比现在保持兼容性要重要,因此list::size()将不再在常量中执行时间在GCC 4.7.2。它将在未来的版本中,在C ++ 98和C ++ 11模式下。