library example ejemplo compiler c++ gcc c++11 c++98

example - ¿Por qué es std:: list más grande en c++ 11?



list c++ example (1)

con este código:

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

Logré notar que en GCC 4.7 el tamaño de std::list<void*> en C ++ 98 es de 16 bytes, y su tamaño en C ++ 11 es de 24 bytes.

Me preguntaba qué cambió en std :: list que lo hizo más grande.


C ++ 11 requiere list::size() para ejecutarse en tiempo constante. GCC hizo esto posible al agregar el tamaño como miembro de datos . GCC no lo hizo para el modo C ++ 98, porque eso rompería la compatibilidad binaria.

No mezcle el código compilado en el modo C ++ 98 con el código compilado en el modo C ++ 11. No funciona

Actualización : al parecer, la gente de GCC tuvo un cambio de corazón y la conformidad con C ++ 11 es menos importante que mantener la compatibilidad por ahora, por lo que list::size() ya no se ejecutará en tiempo constante en GCC 4.7.2. Lo hará en una versión futura, en los modos C ++ 98 y C ++ 11.