0

是否有可能,至少在理论上,cstdint typedefs 绑定到某些特定于实现的类型 std::numeric_limits 不是专门针对的?

根据http://www.cplusplus.com/reference/limits/numeric_limits,让我引用一下,“ [std::numeric_limits] 专门用于每种基本算术类型,其成员描述类型 T 的属性。此模板不应专门用于任何其他类型。

根据http://en.cppreference.com/w/cpp/types/numeric_limits,让我再次引用,“实现可以为特定于实现的类型提供 std::numeric_limits 的特化”。

五月”,cppreference 说。所以他们不必这样做。

最后,根据http://www.cplusplus.com/reference/cstdint,标题中定义的 typedef 是“基本整数类型或扩展整数类型的 typedef ”。

因此,总而言之 - 似乎 cstdint typedefs 可能绑定到扩展整数类型(无论它们是什么),它们不是基本的整数类型(同样,无论它们是什么),因此可能与 std::numeric_limits 不兼容。这个对吗?

但是,我链接到的文档在某一点上似乎略有不一致。cplusplus.com 是否禁止 std::numeric_limits 不得专门用于任何非基本算术类型,以反对 cppreference 允许 std::numeric_limits 可能专门用于特定于实现的类型?当然,除非这些特定于实现的类型实际上 基本的整数类型,在这种情况下,希望 std::numeric_limits 必须专门用于所有 cstdint typedef。

这些文件让我感到困惑。所以我在这里问我的问题:)

编辑。

根据http://eel.is/c++draft/cstdint, cstdint 必须绑定到整数类型。并且根据http://eel.is/c++draft/limits.numeric,“应为每种算术类型提供专门化,包括浮点数和整数,包括 bool ”。整数类型算术类型,因此 std::numeric_limits 必须专门用于 cstdint typedefs 的理解是否正确?

4

1 回答 1

3

诸如std::numeric_limits<std::int_fast32_t>必须存在的专业。

3.9.1/2:

有五种标准有符号整数类型:“ signed char”、“ short int”、“ int”、“ long int”和“ long long int”。...也可能有实现定义的扩展有符号整数类型。标准和扩展的有符号整数类型统称为有符号整数类型

3.9.1/3:

对于每个标准有符号整数类型,存在一个对应的(但不同的)标准无符号整数类型......同样,对于每个扩展的有符号整数类型,存在一个相应的扩展无符号整数类型......标准和扩展的无符号整数类型统称为无符号整数类型

3.9.1/7:

类型bool, char, char16_t, char32_t,wchar_t以及有符号和无符号整数类型统称为整数类型。整数类型的同义词是整数类型

3.9.1/8:

整数浮点类型统称为算术类型。标准模板std::numeric_limits(18.3)的特化应指定实现的每种算术类型的最大值和最小值。

18.3.2.1/2:

numeric_limits应为每种算术类型(包括浮点数和整数)提供[of] 的特化,包括bool.

18.4.1:

namespace std {
  typedef signed_integer_type int8_t;    // optional
  //...
  typedef unsigned_integer_type uint8_t; // optional
  //...
}

所以 中定义的类型<cstdint>可能是扩展类型,但肯定是整数类型,因此必须有std::numeric_limits.

此外,在标准(3.9)中使用的意义上,所有整数类型都是“基本的”,尽管并非所有都是标准类型。

于 2015-07-20T23:09:31.093 回答