【发布时间】:2011-03-06 11:05:05
【问题描述】:
我记得在某处读到 Qt 在支持的平台上保证某些数据类型的大小。是不是int 到处都是至少 32 位,而qint32 到处都是完全 32 位?还是别的什么?
C++ 保证 int 至少为 16 位,并且一些 Qt 结构,如 QRect 和 QPoint 在内部使用 int。我正在开发一个应用程序,其中这些类型需要 32 位,我不想复制它们的功能,所以我可以使用更大的类型。
【问题讨论】:
我记得在某处读到 Qt 在支持的平台上保证某些数据类型的大小。是不是int 到处都是至少 32 位,而qint32 到处都是完全 32 位?还是别的什么?
C++ 保证 int 至少为 16 位,并且一些 Qt 结构,如 QRect 和 QPoint 在内部使用 int。我正在开发一个应用程序,其中这些类型需要 32 位,我不想复制它们的功能,所以我可以使用更大的类型。
【问题讨论】:
整数类型的大小取决于编译器。我认为不能保证普通的int 具有精确的大小。但是您可以通过将此行添加到 main() 的开头来确保您知道这不是您想要的:
if(sizeof(int) != 4) {
throw std::runtime_error("int is not 32-bit");
}
【讨论】:
QtGlobal 定义了几个 typedef。例如,qint32 的文档说“Typedef for signed int。这种类型保证在 Qt 支持的所有平台上都是 32 位的。”。所以这意味着int在所有支持的平台上也必须保证是32位的?
sizeof 检查其大小来知道int 中有多少位。见stackoverflow.com/q/271076/95735
据我所知,虽然 int 不是 32 位在技术上是可能的,但我从未见过一个平台不是。想象一下——char、8bits、short、16bits、int、.. 24bits?它根本不适合 int 为非 32 位的层次结构。
此外,您可以在给定的编译器上使用 UINT_MAX 来确认 int 的大小。
【讨论】:
sizeof 运算符获得)和最小 位数(以便可以表示UINT_MAX 的值)是两个不同的东西。见stackoverflow.com/q/271076/95735