使用此代码:
#include <iostream>
#include <list>
int main() {
std::cout << sizeof(std::list<void*>) << std::endl;
};
我设法注意到,在 GCC 4.7std::list<void*>
上,C++98 的大小为 16 字节,而 C++11 的大小为 24 字节。
我想知道 std::list 上发生了什么变化使它变大了。
C++11 要求list::size()
在恒定时间内执行。GCC 通过将大小添加为数据成员使这成为可能。GCC 没有为 C++98 模式这样做,因为那会破坏二进制兼容性。
不要将 C++98 模式下编译的代码与 C++11 模式下编译的代码混用。它不起作用。
更新:显然,GCC 人改变了主意,C++11 的一致性不如现在保持兼容性重要,因此list::size()
在 GCC 4.7.2 中将不再以恒定时间执行。它将在未来的版本中,在 C++98 和 C++11 模式下。