簡體   English   中英

為什么 std::list 在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM