Devo utilizzare l'implementazione C o C ++ per restituire una dimensione massima di un tipo di variabile?

StackOverflow https://stackoverflow.com/questions/3104772

Domanda

Dal punto di vista standard, devo utilizzare la seguente dal C ++ intestazione <limits>?

UCHAR_MAX, che è l'implementazione C o std::numeric_limits<unsigned char>::max() che è l'implementazione C ++.

Il risultato è equivalente tra le due versioni, ma devo scegliere un'implementazione basata su alcuni standard o la leggibilità e la portabilità in questo caso. Nota questa implementazione deve essere cross-platform. Sto scrivendo il codice C ++.

È stato utile?

Soluzione

Se si desidera che il codice sia in grado di compilare come C, quindi è praticamente bisogno di usare <limits.h>. Se si scrive C ++, probabilmente è meglio usare l'intestazione C ++ <limits> invece. Quest'ultimo permette di scrivere codice che funziona nei modelli che non possono davvero essere duplicati con l'intestazione C:

template <class T>
class mytemplate { 
    T x;
    void somefunc() { x = std::numeric_limits<T>::max(); } // or whatever...
};

Altri suggerimenti

Sapere in che lingua si sta scrivendo, e scrivere in quella lingua. Se si scrive C ++, utilizzare il modo di fare le cose standard C ++.

standard C ++ è normalmente cross-platform (ci sono eccezioni, come export, ma è export rimosse dalla standard C ++ comunque). Di solito è più leggibile da attaccare con C ++ costrutti che per passare da costrutti C e C ++.

Si dovrebbe usare di rimanere coerente.

sulla piattaforma Windows, se si include , si potrebbe anche voler

#define NOMINMAX

per evitare un conflitto di nomi con min e max.

Quando si utilizza C, std::numeric_limits, ovviamente, non è disponibile.

In C ++ dipende da cosa si vuole fare -. std::numeric_limits<T>::max() non è un'espressione costante con l'attuale standard C ++
In questi casi, un'alternativa alle macro C-ish potrebbe essere quella di usare qualcosa come Boost.Integers interi tratti const_min / const_max che funziona anche in contesti templated.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top