在构建下表并将鼠标悬停在未注释的 std::int_fast16_t 和 std::uint_fast16_t 上时,我发现它们被声明为 int 和 unsigend int,而不是短整型和无符号短整型。对于表中的所有其他数据类型,声明均符合预期。
我使用最新版本的 Visual Studio。这可能是 VC C++ 标准库实现错误或 Intellisense 问题。谁能确认一下。
要重现,只需键入:std::int_fast16 或 std::uint_fast16 并将鼠标指针悬停在其上。
//std::int8_t : 8 bits : signed char, char
// std:int_fast8_t
// std::int_least8_t
//std::uint8_t : 8 bits : unsigend char
// std::uint_fast8_t
// std::uint_least8_t
//std::int16_t : 16 bits : signed short, short
// std::int_fast16_t : <<<< int 32 bit !!! <<<<<<<
// std::int_least16_t
//std::uint16_t : 16 bits : unsigned short
// std::uint_fast16_t : <<<< unsigned int 32 bit !!!
// std::uint_least16_t
//std::int32_t : 32 bits : signed int, int
// std::int_fast32_t
// std::int_least32_t
//std::uint32_t : 32 bits : unsigned int
// std::uint_fast32_t
// std::uint_least32_t
//std::int64_t : 64 bits : signed long long, long long
// std::int_fast64_t
// std::int_least64_t
//std::uint64_t : 64 bits : unsigned long long
// std::uint_fast64_t
// std::uint_least64_t
这是有意的。
(u)intXX_fast_t
应该是具有最小 XX
位宽度的任何有符号/无符号整数类型,并且对于底层架构来说是最有效的此类类型。无法保证它们完全 16 位宽。那将是(u)intXX_t
。
short
非常像 16 位宽,16 位宽类型在 x86/x86-64 CPU 上效率较低,可能在大多数其他 32 位或 64 位架构上也是如此。