28

使用此代码:

#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 上发生了什么变化使它变大了。

4

1 回答 1

43

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 模式下。

于 2012-04-08T18:06:45.017 回答