Por que tantas bibliotecas de definir a sua própria largura fixa de números inteiros?

0

Pergunta

Desde, pelo menos, C++11 nós ficou linda de largura fixa, números inteiros, por exemplo, em C++'s <cstdint> ou em C <stdint.h> fora da caixa, (por exemplo, std::uint32_t, std::int8_t), portanto, com ou sem a std:: na frente deles e assim como macros para larguras mínimas (INT16_C, UINT32_C e assim por diante).

No entanto, temos de fazer negócio com bibliotecas de cada dia, que definem suas próprias largura fixa de números inteiros e você pode ter visto, por exemplo, sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32"Eu posso ir sobre e sobre, se você me quer. Você também conhece um casal, mais provavelmente.

Às vezes, essas typedefs (também, muitas vezes, definições de macro) pode levar a conflitos, por exemplo, quando você deseja passar um std largura fixa inteiro para uma função de uma biblioteca esperando uma largura fixa inteiro, com exatamente a mesma largura, mas definido de forma diferente.

O ponto de largura fixa números inteiros é ter um tamanho fixo, que é o que precisa, em muitas situações, como você sabe. Então, por que todas essas bibliotecas de ir sobre e typedef exatamente os mesmos números inteiros já temos em C++ padrão? Aqueles extra define são, por vezes, confuso, redundante, e pode invadir a sua base de código, que são coisas muito ruins. E se eles não têm a largura e o sinal que eles prometem ter, ao menos o pecado contra o princípio da mínima surpresa, então, qual é o seu ponto, tenho a honra de pedir-lhe?

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

Melhor resposta

5

Por que tantas bibliotecas de definir a sua própria largura fixa de números inteiros?

Provavelmente, por algum dos motivos abaixo:

  • eles começaram antes de C++11 ou C11 (exemplos: GTK, Qt, bibliotecas interno para o GCC, Impulso, baseado em FLTK, GTKmm, Jsoncpp, Eigen, Dlib, OpenCV, Wt)

  • eles querem ter um código legível, dentro de suas próprias namespace ou class (ter o seu próprio espaço de nomes, como o Qt não, pode melhorar a legibilidade do bem código escrito).

  • eles são " build-tempo configurável (e.g. com o GNU autoconf).

  • eles querem ser compilável com idade compiladores de C++ (e.g. alguns C++03 um)

  • eles querem ser cross-compilável para baixo incorporado microcontroladores cujo compilador não é uma completa C++11 compilador.

  • eles podem ter códigos genéricos (ou template-s, por exemplo, no Eigen ou Dlib) para, talvez, suporte arbitrário-aritmética de precisão (ou bignums) talvez usando GMPlib.

  • eles querem ser, de alguma forma, provada com Frama-C ou FAZER-178C certificado (para sistemas embarcados críticos de sistemas de software)

  • eles são específicos do processador (e.g. asmjit que gera código de máquina em tempo de execução em algumas arquitecturas)

  • eles podem interface para o hardware específico ou linguagens de programação (Tensorflow, OpenCL, Cuda).

  • eles querem ser utilizável a partir de Python ou GNU dolo.

  • eles poderiam ser específico do sistema operativo.

  • eles adicionar alguns adicionais de tempo de execução verifica, por exemplo, contra a divisão por 0 (ou outro comportamento indefinido) ou excesso (o que o padrão de C++ não pode exigir, para o desempenho ou por razões históricas)

  • eles destinam-se a ser facilmente utilizável de máquina gerado pelo código C++ (e.g. RefPerSys, ANTLR, ...)

  • eles são projetados para ser exigível a partir de código C (e.g. libgccjit).

  • etc... Encontrar outras boas razões é deixado como um exercício para o leitor.

2021-11-24 08:35:11

Ok, você ganha. Eu vou parar de rolar de meus olhos a cada vez que eu vejo um.
nada

Eu tenho muito o código correspondente o primeiro ponto de marcador não é engraçado.
user4581301

Em outros idiomas

Esta página está em outros idiomas

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