Perché così tante librerie di definire la loro larghezza fissa interi?

0

Domanda

Almeno dal C++11 abbiamo avuto bel larghezza fissa interi per esempio in C++ <cstdint> o C <stdint.h> out of the box, (per esempio std::uint32_t, std::int8_t), quindi con o senza il std:: di fronte a loro e anche come macro per un minimo di larghezze (INT16_C, UINT32_C e così via).

Ancora dobbiamo fare occupano di librerie di ogni giorno, che definiscono la loro larghezza fissa interi e si potrebbe avere visto per esempio sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32, ... Posso andare su e su, se mi vuoi. Anche tu conosco un paio di più, probabilmente.

A volte questi tipi di (spesso anche le definizioni di macro) può portare a conflitti, per esempio, quando si desidera passare un std larghezza fissa intero per una funzione di una libreria in attesa di una larghezza fissa intero con esattamente la stessa larghezza, ma definiti in modo diverso.

Il punto di larghezza fissa interi è loro che hanno una dimensione fissa, che è ciò di cui abbiamo bisogno, in molte situazioni, come sapete. Ma perché tutte queste biblioteche andare su e typedef esattamente la stessa interi, abbiamo già nello standard C++? Quelle extra definisce sono a volte confuse, ridondante e può invadere il vostro codebase, che sono cose molto cattive. E se non hanno la larghezza e l' "signedness" che promettono di avere, almeno il peccato contro il principio del minimo stupore, quindi qual è il loro punto sono con la presente a chiedere?

c++ fixed-width integer
2021-11-23 14:45:24
1

Migliore risposta

5

Perché così tante librerie di definire la loro larghezza fissa interi?

Probabilmente per alcuni dei motivi di seguito:

  • hanno iniziato prima di C++11 o C11 (esempi: GTK, Qt, librerie interne di GCC, Boost, FLTK, GTKmm, Jsoncpp, Eigen, Dlib, OpenCV, Wt)

  • vogliono avere leggibile il codice, all'interno della propria namespace o class (avere un proprio spazio dei nomi, come Qt non, può migliorare la leggibilità del codice ben scritto).

  • sono in fase di compilazione configurabile (ad esempio con GNU autoconf).

  • vogliono essere compilato con i vecchi compilatori C++ (ad esempio in C++03 uno)

  • vogliono essere cross-compilato per il mercato embedded, microcontrollori , il cui compilatore non è un compilatore C++11.

  • essi possono avere un codice generico (o template-s, ad esempio, in Auto o Dlib) e forse di supporto arbitraria precisione aritmetica (o bignums) magari utilizzando GMPlib.

  • vogliono essere in qualche modo dimostrabile con Frama-C o DO-178C certificata (embedded per sistemi software critici)

  • sono specifica del processore (ad esempio asmjit che genera codice macchina in fase di runtime su un paio di architetture)

  • potrebbero interfaccia hardware specifico o linguaggi di programmazione (Tensorflow, OpenCL, Cuda).

  • vogliono essere utilizzabile da Python o GNU guile.

  • potrebbero essere specifico per il sistema operativo.

  • essi aggiungere alcune ulteriori controlli in fase di esecuzione, ad esempio, contro la divisione per 0 (o altro comportamento indefinito) o di overflow (che il C++ standard non possono richiedere, per le prestazioni o per ragioni storiche)

  • essi sono progettati per essere facilmente utilizzabile da macchina generato il codice C++ (ad esempio RefPerSys, ANTLR, ...)

  • essi sono progettati per essere richiamabile dal codice C (ad esempio libgccjit).

  • ecc... per Trovare altri buoni motivi è lasciato come esercizio per il lettore.

2021-11-24 08:35:11

Va bene, hai vinto. Mi fermo rotolare i miei occhi ogni volta che ne vedo uno.
nada

Ho tanto di codice corrispondente al primo punto non è divertente.
user4581301

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................