Ily*_*kiy 20 c++ floating-point qt types
有没有办法在C++中声明32位浮点值 - 确保无论平台/编译器如何,它总是32位?
我可以为那样的整数做到这一点:
#include <stdint.h>
uint32_t var; //32 bit unsigned integer
uint64_t var1; //64 bit unsigned integer
Run Code Online (Sandbox Code Playgroud)
有没有办法为花车做类似的事情?我所知道的,
float var; //Usually is 32 bit, but NOT GUARANTEED to be 32 bit
Run Code Online (Sandbox Code Playgroud)
是具体的实现,并不一定是32位..(纠正我,如果我错了).
我正在使用qt,所以如果有任何解决方案使用它我会接受它 - 我找不到任何像quint16 for floats(qreal根据平台改变大小).
Kei*_*son 12
你正在使用Qt.这是特定于C++的,所以我不确定为什么这个问题被标记为C.
据我所知,在支持Qt的所有平台上,类型float是32位IEEE.
如果有人决定将Qt移植到例如64位的Cray矢量机float,那么你不会有32位浮点类型(除非你自己在软件中实现它,但我看不到这将是多么有用).
没有<stdfloat.h>/ <cstdfloat>对应于<stdint.h>/ <cstdint>.C和C++提供float,double和long double,并且对它们提出最低要求,但是没有给出一种方法来请求任何特定大小的浮点类型.
你最好的选择可能是添加这样的东西main,或者在程序启动期间保证调用的某些函数:
assert(CHAR_BIT * sizeof (float) == 32);
Run Code Online (Sandbox Code Playgroud)
CHAR_BIT == 8如果您的代码隐含地依赖于此,那么也许也是如此.
这种assert意志不太可能会触发 - 如果确实如此,你就会遇到更大的问题.
您可能想重新考虑是否确实需要32位浮点类型.如果您的代码在64位系统上运行float,那么它将如何满足您的要求?
没有这种大小的浮点类型,但您可以始终静态断言大小为32位.甚至可能像全局char数组一样简单:
#include <climits>
char static_assert_float32[1 - (2 * ((sizeof(float) * CHAR_BIT) != 32))];
Run Code Online (Sandbox Code Playgroud)
如果float通过声明负数大小的数组不是32位,则无法编译.