C ++ F32 include il file?
Domanda
Ho appena iniziato a scrivere il mio manager di memoria, ma per farlo, ho bisogno di un tipo di file include per creare un f32
(Float Integer).
io ho #include <cstdint>
già nel mio programma, ma non sono sicuro di cosa avrei bisogno per un F32
, o I32
per questo motivo.
Soluzione
Afaik non esiste un modo standardizzato per ottenere tipi di punti mobili a larghezza fissa - penso perché, a differenza dei tipi di interi, float
e double
sono più o meno ovunque lo stesso (32 bit float
, 64 bit double
, con tipi separati per tipi FP "strani").
Tuttavia, se vuoi essere più sicuro, puoi fare un assert statico prima di creare il tuo typedef:
#include <climits>
static_assert(sizeof(float)*CHAR_BIT==32, "float is not 32 bit on this architecture, fix the f32 typedef.");
typedef float f32;
In questo modo, su piattaforme "sane" questo funzionerà perfettamente, mentre su piattaforme "strane" non riuscirà a compilare, dandoti la possibilità di aggiungere una piattaforma specifica typedef
.
Per quanto riguarda i32, è sufficiente includere <cstdint>
e crea il tuo typedef:
#include <cstdint>
typedef std::int32_t i32;