![](/img/trans.png)
[英]Why are std::begin() and std::end() overloaded for std::initializer_list in C++11?
[英]Why is std::list bigger on c++11?
使用此代码:
#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 让它变大了。
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 模式出现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.