long
とlong int
同一です。そうしているlong long
とlong long int
。どちらの場合も、int
はオプションです。
2つのセットの違いについては、C ++標準ではそれぞれの最小範囲が義務付けられており、それlong long
は少なくともと同じlong
です。
標準の制御部分(C ++ 11ですが、これは長い間使用されてきました)は3.9.1 Fundamental types
、セクション2です(後のセクションでは、符号なし整数型について同様の規則を示します)。
標準の符号付き整数型には、signed char、short int、int、long int、long long intの5つがあります。このリストでは、各タイプは、少なくともリストの前のタイプと同じ量のストレージを提供します。
の表9もあり7.1.6.2 Simple type specifiers
、これは指定子の実際のタイプへの「マッピング」を示しています(int
がオプションであることを示しています)。そのセクションを以下に示します。
Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int
指定子とタイプの違いに注意してください。指定子は、コンパイラーに型を指定する方法ですが、異なる指定子を使用して同じ型にすることができます。
したがってlong
、それ自体は、あなたの質問が示唆するようにタイプでも修飾子でもありません、それは単にlong int
タイプの指定子です。同上long long
long long int
タイプの指定子であることについて、。
C ++標準自体は、整数型の最小範囲を指定していませんが1.2 Normative references
、C99 を適用として引用しています。したがって、に記載されてC99 5.2.4.2.1 Sizes of integer types <limits.h>
いる最小範囲が適用されます。
に関してはlong double
、これは実際には整数ではなく浮動小数点値です。整数型と同様に、少なくともa double
と同じ精度を持ち、その型に対して値のスーパーセットを提供する必要があります(少なくともこれらの値を意味しますが、必ずしもより多くの値を意味するわけではありません)。