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?