¿Por qué tantas bibliotecas de definir su propio ancho fijo enteros?

0

Pregunta

Por lo menos desde C++11 tenemos encantadora de ancho fijo enteros, por ejemplo, en C++ <cstdint> o en C <stdint.h> fuera de la caja, (por ejemplo std::uint32_t, std::int8_t), así que con o sin el std:: delante de ellos, e incluso como macros para el ancho mínimo de (INT16_C, UINT32_C y así sucesivamente).

Sin embargo, hemos de hacer trato con las bibliotecas de cada día, que definen su propia ancho fijo enteros y usted podría haber visto, por ejemplo, sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32, ... Puedo ir y si me quieres. Usted también conozco a un par más, probablemente.

A veces estos typedefs (a menudo también las definiciones de macro) puede llevar a conflictos, por ejemplo, cuando se desea pasar un std ancho fijo entero a una función de una biblioteca esperando un ancho fijo entero con exactamente el mismo ancho, pero se define de manera diferente.

El punto de anchura fija números enteros es que ellos tengan un tamaño fijo, que es lo que necesitamos en muchas situaciones, como ustedes saben. Entonces, ¿por qué todas estas bibliotecas ir sobre y typedef exactamente el mismo enteros ya tenemos en el estándar de C++? Los define son a veces confusos, redundante y puede invadir tu base de código, que son cosas muy malas. Y si no tienen el ancho y signedness prometen tener, al menos el pecado contra el principio de la menor sorpresa, así que ¿cuál es su punto por la presente pido a usted?

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

Mejor respuesta

5

¿Por qué tantas bibliotecas de definir su propio ancho fijo enteros?

Probablemente por alguna de las siguientes razones:

  • iniciado antes de C++11 o C11 (ejemplos: GTK, Qt, bibliotecas interna para GCC, Boost, FLTK, GTKmm, Jsoncpp, Eigen, Dlib, OpenCV, Wt)

  • quieren tener un código legible, dentro de su propia namespace o class (teniendo su propio espacio de nombres, como Qt hace, puede mejorar la legibilidad de código escrito).

  • ellos son la acumulación de tiempo configurable (por ejemplo, con GNU autoconf).

  • ellos quieren ser compilable con el viejo de los compiladores de C++ (por ejemplo, un poco de C++03 uno)

  • ellos quieren ser de la cruz-compilable para barato incrustado microcontroladores cuyo compilador no es un completo C++11 compilador.

  • ellos pueden tener el código genérico (o template-s, por ejemplo, en Eigen o Dlib) tal vez el apoyo de cálculo de precisión arbitraria (o bignums) tal vez usando GMPlib.

  • ellos quieren ser de alguna manera demostrable con Frama-C o DO-178C la certificación (por incrustado crítico de los sistemas de software)

  • son específicos del procesador (por ejemplo, asmjit que genera el código máquina en tiempo de ejecución en un par de arquitecturas)

  • se pueden interconectar para hardware específico o lenguajes de programación (Tensorflow, OpenCL, Cuda).

  • ellos quieren ser utilizable desde Python o GNU astucia.

  • podrían ser específico del sistema operativo.

  • añaden algo de tiempo de ejecución adicional comprueba, por ejemplo, contra la división por 0 (u otro comportamiento indefinido) o de desbordamiento (que el estándar de C++ no se puede exigir, por rendimiento o razones históricas)

  • están pensadas para que sean fácilmente utilizables de la máquina-genera código C++ (por ejemplo, RefPerSys, ANTLR, ...)

  • están diseñados para ser exigible a partir de código en C (por ejemplo, libgccjit).

  • etc... la Búsqueda de otras buenas razones se deja como ejercicio para el lector.

2021-11-24 08:35:11

Está bien, tú ganas. Voy a dejar de rodar mis ojos cada vez que veo uno.
nada

Tengo mucho código que corresponda a la primera viñeta no es gracioso.
user4581301

En otros idiomas

Esta página está en otros idiomas

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