Ponieważ, przynajmniej w C++11, otrzymaliśmy piękne liczb całkowitych o stałej szerokości, np. w C++ <cstdint>
lub w literach "Z" <stdint.h>
po wyjęciu z pudełka, (np. std::uint32_t
, std::int8_t
), więc z lub bez std::
przed nimi, a nawet jako makr dla minimalnej szerokości (INT16_C
, UINT32_C
i tak dalej).
Jednak każdego dnia mamy do czynienia z bibliotekami, które określają swoje własne liczby stałej szerokości, a może widzieliście, np. sf::Int32
, quint32
, boost::uint32_t
, Ogre::uint32
, ImS32
, ... Mogę tak wymieniać w nieskończoność, jeśli chcesz. Ty też pewnie wiesz jeszcze kilka.
Czasami te różnice typów (również często definicje makr) mogą prowadzić do konfliktów, na przykład, gdy chcesz przekazać std
liczba całkowita o stałej szerokości do funkcji z biblioteki, która oczekuje liczba całkowita o stałej szerokości z dokładnie tej samej szerokości, ale pewnego inaczej.
Sens liczb całkowitych o stałej szerokości w tym, że mają stały rozmiar, co, jak wiesz, musimy się w wielu sytuacjach. Dlaczego więc wszystkich tych bibliotek wykorzystać i wprowadzić dokładnie takie same liczby, które mamy już w standardzie C++? Te dodatkowe określenia czasami są mylące, przesadne i mogą wtrącać się w waszą bazę kodu, że jest bardzo źle. I jeśli nie mają tej szerokości i sztywności, które obiecują, są, co najmniej, grzeszą przeciwko zasady najmniejszego zdziwienia, więc jaki jest ich sens, pytam się was?