Почему 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.

Другие вопросы по тегам