使用此代码:
#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上有什么变化让它更大了。
答案 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模式下。