De ce atât de multe biblioteci își definească propria lățime fixă numere întregi?

0

Problema

Cel puțin din C++11 ne-am minunat lățime fixă numere întregi, de exemplu in C++modelului <cstdint> sau în C e <stdint.h> afară de la cutie, (de exemplu std::uint32_t, std::int8_t), deci cu sau fără std:: în fața lor și chiar ca macro-uri pentru minim lățimi (INT16_C, UINT32_C și așa mai departe).

Încă avem de a face cu biblioteci în fiecare zi, care definesc propriile lățime fixă numere întregi și s-ar putea fi văzut de exemplu sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32, ... Nu pot merge pe și de pe, dacă vrei. Ai prea știu un cuplu mai probabil.

Uneori, aceste typedefs (de asemenea, de multe ori definiții macro) poate duce la conflicte de exemplu, atunci când vrei să treci la un std lățime fixă număr întreg la o funcție dintr-o bibliotecă așteaptă o lățime fixă număr întreg cu exact aceeași lățime, dar definită în mod diferit.

Punctul de lățime fixă numere întregi este ele având o dimensiune fixă, care este ceea ce avem nevoie în multe situații după cum știți. Deci, de ce ar toate aceste biblioteci și du-te despre typedef exact aceleași numere întregi avem deja în C++ standard? Cei suplimentar definește sunt uneori confuze, redundante și poate invada codebase, care sunt lucruri foarte rele. Și dacă nu au lățimea și signedness ei promit să aibă, cel puțin păcat împotriva principiu de uimire, deci, ce este punctul lor prin prezenta, vă întreb?

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

Cel mai bun răspuns

5

De ce atât de multe biblioteci își definească propria lățime fixă numere întregi?

Probabil pentru unii dintre motivele de mai jos:

  • au început înainte de C++11 sau C11 (exemple: GTK, Qt, biblioteci interne a CCG, Impuls, FLTK, GTKmm, Jsoncpp, Eigen, Dlib, OpenCV, Wt)

  • ei doresc să aibă cod care poate fi citit, în propria lor namespace sau class (având propriul spațiu de nume, cum ar fi Qt se poate îmbunătăți lizibilitatea cod bine scris).

  • sunt construite în timp configurabile (de exemplu, cu GNU autoconf).

  • ei doresc să fie compilable cu vechi C++ compilatoare (de exemplu, unele C++03 unul)

  • ei vor să fie eco-compilable să ieftine încorporat microcontrolere căror compiler nu este un complet de C++11 compiler.

  • acestea pot fi generice de cod (sau template-s, de exemplu, în Eigen sau Dlib) pentru a sprijini, probabil, arbitrare precizie aritmetică (sau bignums) poate utiliza GMPlib.

  • ei doresc să fie cumva demonstrabile cu Frama-C sau NU-178C certificate (pentru embedded software critic sisteme)

  • acestea sunt procesor specifice (de exemplu, asmjit care generează cod mașină în timpul rulării pe o câteva arhitecturi)

  • s-ar putea interfață pentru un anumit hardware sau limbaje de programare (Tensorflow, OpenCL, Cuda).

  • ei doresc să fie utilizabil de la Python sau GNU viclenie.

  • acestea ar putea fi specifice sistemului de operare.

  • acestea se adaugă unele suplimentare de execuție controale, de exemplu, împotriva diviziei de 0 (sau alte nedefinit comportament) sau reverse (că C++ standard nu pot impune, pentru performanta sau pentru motive istorice)

  • acestea sunt destinate să fie rapid utilizabil din mașină generat de C++ cod (de exemplu, RefPerSys, ANTLR, ...)

  • acestea sunt concepute pentru a fi executate de C cod (de exemplu, libgccjit).

  • etc... de a Găsi alte motive întemeiate, este lăsată ca exercițiu pentru cititor.

2021-11-24 08:35:11

Bine, ai câștigat. Mă voi opri de rulare ochii mei de fiecare dată când o văd.
nada

Am atât de mult cod de potrivire prima liniuță nu este amuzant.
user4581301

În alte limbi

Această pagină este în alte limbi

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