Я хочу знать, как QVariant может хранить внутри, int, QMap, QList, ...
Я имею в виду, что такое внутренняя структура данных / реализация? Каковы накладные расходы на хранение и получение типов (int, float) в QVariant?
Я хочу знать, как QVariant может хранить внутри, int, QMap, QList, ...
Я имею в виду, что такое внутренняя структура данных / реализация? Каковы накладные расходы на хранение и получение типов (int, float) в QVariant?
Беглый взгляд на код показывает, что QVariant
- это, по сути, union
из нескольких примитивных типов (int
, float
и т. Д.), Указатель QObject
и указатель void*
для всего, что не является QObject
и не примитивом. Существует также член данных типа, который позволяет ему знать, что на самом деле там хранится. Накладные расходы, похоже, не намного больше, чем хранение в члене структуры, проверка его совместимости типов и, возможно, преобразование (например, int в float)
QVariant
всего 16 байтов: 8 байтов (самый большой тип примитива) + 4 байта (информация о типе) + 4 байта (заполнение).
- person hrr; 30.11.2011
QVariant
и 16 для QVariant::Private
. По крайней мере, это то, что мне говорит sizeof
. Я не считал их вручную.
- person derM; 22.09.2017