Почему std:: list больше на С++ 11?

с помощью этого кода:

#include <iostream>
#include <list>

int main() {
    std::cout << sizeof(std::list<void*>) << std::endl;
};

Мне удалось заметить, что на GCC 4.7 размер std::list<void*> на С++ 98 равен 16 байтам, а его размер на С++ 11 составляет 24 байта.

Мне было интересно, что изменилось в std:: list, что сделало его больше.

Ответ 1

С++ 11 требует выполнения list::size() в постоянное время. GCC сделал это возможным с помощью добавления размера в качестве элемента данных. GCC не сделал этого для режима С++ 98, потому что это нарушило бы двоичную совместимость.

Не смешивайте код, скомпилированный в режиме С++ 98, с кодом, скомпилированным в режиме С++ 11. Это не работает.

Обновить. По-видимому, люди GCC изменили свое мнение, а соответствие С++ 11 менее важно, чем поддержка совместимости, поэтому list::size() больше не будет выполняться в течение GCC 4.7.2. Он будет в будущей версии как в режимах С++ 98, так и в С++ 11.