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.

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top