Ответ 1
Быстрый просмотр кода показывает, что QVariant
представляет собой в основном union
нескольких примитивных типов (int
, float
и т.д.), указатель QObject
и указатель void*
для все, что не является QObject
, а не примитивным. Существует также элемент данных типа, который позволяет ему знать, что на самом деле хранилось в настоящее время. Накладные расходы, по-видимому, не намного больше, чем хранение члену структуры, проверка на совместимость типов и, возможно, преобразование (например, int float)