Почему std::list больше на C++11?
С этим кодом:
#include <iostream>
#include <list>
int main() {
std::cout << sizeof(std::list<void*>) << std::endl;
};
Мне удалось заметить, что на GCC 4.7 размер std::list<void*>
в C++98 - 16 байтов, а его размер в C++11 - 24 байта.
Мне было интересно, что изменилось в std::list, что сделало его больше.
1 ответ
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.