Qt

QVariant 實作

在 C++ 中變數的 type 需要在 compile time 時知道, 但是有些情況是只能在 runtime 才能知道 type 的, 例如從 database 取出一個值, 此時無法在 compile time 知道拿到的 type, 所以會需要一個方式來儲存所有的 type。

QVariant 目前佔 16 bytes, 主要為一個 union 內包含 primitive types (int, float, ...) + QObject pointer + void pointer (for non-QObject & non-primitive type) 取最大的為 8 bytes,其他還有 30 bits 的 type info,2 bit 的 flags, 8 bytes + 30 bits + 2 bits = 16 bytes (詳細 code 在 qtbase/src/corelib/kernel/qvariant.h 裡的 struct Private) 。

Reference

Reference