VC++ 标准库 - int_fast16_t 和 uint_fast16_t 可能存在编译器数据类型声明错误

问题描述 投票:0回答:1

在构建下表并将鼠标悬停在未注释的 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
c++ visual-c++ c++-standard-library
1个回答
0
投票

这是有意的。

(u)intXX_fast_t
应该是具有最小
XX
位宽度的任何有符号/无符号整数类型,并且对于底层架构来说是最有效的此类类型。无法保证它们完全 16 位宽。那将是
(u)intXX_t

short
非常像 16 位宽,16 位宽类型在 x86/x86-64 CPU 上效率较低,可能在大多数其他 32 位或 64 位架构上也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.