提问人:Walter 提问时间:9/16/2023 最后编辑:Eric PostpischilWalter 更新时间:9/16/2023 访问量:51
VC++ 标准库 - int_fast16_t和uint_fast16_t可能的编译器数据类型声明错误
VC++ Standard Lib - possible compiler datatype declaration error for int_fast16_t and uint_fast16_t
问:
在构建下面的表格并将鼠标悬停在未标记的 std::int_fast16_t 和 std::uint_fast16_t 上时,我发现它们被声明为 int 和 unsigend int,而不是 short 和 unsigned short。对于表中的所有其他数据类型,声明符合预期。
我使用的是最新版本的 Visual Studio。它可能是 VC C++ 标准库实现错误或智能感知问题。谁能确认。
要重现,只需键入 : 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
答:
1赞
user17732522
9/16/2023
#1
这是有意为之的。 应该是任何至少具有位宽的有符号/无符号整数类型,并且是底层体系结构中性能最高的此类类型。不能保证它们正好是 16 位宽。那将是.(u)intXX_fast_t
XX
(u)intXX_t
short
非常像 16 位宽和 16 位宽类型在 x86/x86-64 CPU 上性能较低,可能大多数其他 32 位或 64 位架构也是如此。
(当然,性能是相对的,由 C++ 实现来决定它的确切含义。例如,如果程序受到 RAM 吞吐量的限制,那么无论 CPU 是否更容易对该类型进行单个操作,较小的类型都会使它受益。
评论
int
short
fast16
uint_fast16_t
- “宽度至少为 16 位的最快无符号整数类型”en.cppreference.com/w/cpp/types/integer