QVariant在内部是如何工作的?

11
我想知道,QVariant内部如何存储int、QMap、QList等数据类型,它的内部数据结构/实现是什么?在QVariant中存储和检索类型(如int、float)的开销是多少?请保留HTML标记。
1个回答

19
一眼望去,可以看出 QVariant 实际上是几种基本类型(如 intfloat 等)、QObject 指针以及一个用于存储不属于 QObject 和基本类型的 void* 指针的 union。此外,还有一个类型数据成员,它允许它知道当前存储的实际内容是什么。开销似乎不比存储结构体的成员多多少,只需要检查其与类型是否兼容,可能进行一些转换(例如将整数转换为浮点数)。

2
作为额外的开销,它还需要存储底层类型。这使得 QVariant 的总大小为 _16 字节_:8 字节(最大原始类型)+ 4 字节(类型信息)+ 4 字节(填充)。 - hrr
2
至少目前为止,它有一个pimpl。我认为大小现在是32字节,16个用于QVariant,另外16个用于QVariant::Private。至少,这就是sizeof告诉我的。我没有手动计算过它们。 - derM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接