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 の特殊化を提供することがあります」。

5月」、cppreferenceは言います。だから彼らはする必要はありません。

そして最後に、http: //www.cplusplus.com/reference/cstdint によると、ヘッダーで定義されている typedef は「基本的な整数型または拡張整数型の typedef です」。

要約すると、 cstdint typedefsは基本的な整数型ではない拡張整数型(それらが何であれ) にバインドされる可能性があるため、 std::numeric_limits と互換性がない可能性があります。これは正しいです?

ただし、私がリンクしたドキュメントは、ある点で少し矛盾しているようです。std::numeric_limits が実装固有の型に特化されている可能性があるという cppreference の許容に反して、std::numeric_limits を非基本的な算術型に特化してはならないという cplusplus.com の禁止事項ではありませんか? もちろん、これらの実装固有の型が実際に 基本的な整数型でない限り、うまくいけば、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"、および " "の 5 つがありますlong long int... 実装定義の拡張符号付き整数型もある場合があります。標準および拡張の符号付き整数型をまとめて符号付き整数型と呼びます。

3.9.1/3:

標準の符号付き整数型のそれぞれに対して、対応する (ただし異なる)標準符号なし整数型が存在します .... 同様に、拡張符号付き整数型のそれぞれに対して、対応する拡張符号なし整数型が存在します .... 標準および拡張符号なし整数型を総称して符号なし整数型と呼びます。

3.9.1/7:

boolcharchar16_tchar32_twchar_tおよび符号付きおよび符号なしの整数型は、まとめて整数型と呼ばれます。整数型の同義語は整数型です。

3.9.1/8:

整数型と浮動小数点型をまとめて算術型と呼びます。標準テンプレートstd::numeric_limits(18.3) の特殊化では、実装の各算術型の最大値と最小値を指定する必要があります。

18.3.2.1/2:

特殊化 [of numeric_limits] は、 を含む浮動小数点と整数の両方の算術型ごとに提供されます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 に答える