![](/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.