Поскольку, по крайней мере, C++11, мы получили прекрасные целые числа фиксированной ширины, например, в C++ <cstdint>
или в буквах "С" <stdint.h>
из коробки, (например std::uint32_t
, std::int8_t
), так что с или без std::
перед ними и даже в качестве макросов для минимальной ширины (INT16_C
, UINT32_C
и так далее).
Тем не менее, мы каждый день имеем дело с библиотеками, которые определяют свои собственные целые числа фиксированной ширины, и вы, возможно, видели, например sf::Int32
, quint32
, boost::uint32_t
, Ogre::uint32
, ImS32
, ... Я могу продолжать и продолжать, если ты хочешь. Вы тоже, вероятно, знаете еще пару.
Иногда эти различия типов (также часто определения макросов) могут привести к конфликтам, например, когда вы хотите передать std
целое число фиксированной ширины для функции из библиотеки, ожидающей целое число фиксированной ширины с точно такой же шириной, но определенной по-другому.
Смысл целых чисел фиксированной ширины в том, что они имеют фиксированный размер, что, как вы знаете, нам нужно во многих ситуациях. Так зачем же всем этим библиотекам использовать и вводить точно такие же целые числа, которые у нас уже есть в стандарте C++? Эти дополнительные определения иногда сбивают с толку, избыточны и могут вторгаться в вашу кодовую базу, что очень плохо. И если у них нет той ширины и жесткости, которые они обещают, они, по крайней мере, грешат против принципа наименьшего удивления, так в чем же их смысл, я вас спрашиваю?