我正在用 C++ 编写一个程序,它将不同的数据存储在一个二进制文件中。我遇到了问题,因为数据类型的大小可以从一个系统更改为另一个系统。我想知道在所有 Windows 平台上浮点数是否总是 4 字节。我构建这个程序的唯一平台是windows。
4 回答
不受 C++ 标准的保证,但当今大多数机器都遵循 ISO/IEC/IEEE 60559:2011 或相同的IEEE-754 浮点标准。按照这个标准,单精度float
是 4 个字节。
您可以检查std::numeric_limits< float >::is_iec559
以<limits>
确保。
是的。当然,在其中抛出一个static_assert(sizeof(float)==4, "whatever")
(或一个普通的旧非静态断言,如果您的编译器不支持前者)可能是明智的,只是为了(a)记录您的假设,并且(b)如果通过一些残酷的命运转折你的平台突然没有 4 字节浮点数。
Windows 没有定义float
-- 你的编译器定义的大小。
Windows 定义的是一个FLOAT
在windef.h 中命名的类型。它被定义为typedef float FLOAT;
。这是 Win32 API 使用的类型名称,如果 Windows 支持对您很重要,您应该使用该名称。我怀疑任何 Windows 编译器都会改变其float
类型的格式,但微软当然可以改变它们的typedef
for FLOAT
,这将改变它float
在所有版本的 Windows 上支持的意义。
是的,它只有 4 个字节,但不能保证。您可以检查IEEE 浮点以供参考。
您可以通过这样的跨平台行为进行检查:-
#include <cassert>
int main () {
assert(sizeof(float) == 4);
// If control goes here you can be sure float is 4 bytes.
}