64ビットでGCCを使用してC++プログラムをコンパイルしています-machine/OS /(-m64
オプションをに渡してg++
)。予想通り、sizeof(long double) == 16
–整数の16バイト長の標準タイプがあるかどうか疑問に思っていますか?
PS__int128_t
は、私が理解したように、標準タイプをエミュレートする人工的な拡張機能です。それ以外は何も見つかりませんでした。
いいえ、保証されたサイズのみがchar
、unsigned char
&signed char
であり、それらは次の1
とおりです。
5.3.3 sizeof [expr.sizeof]
1 sizeof 演算子は、そのオペランドのオブジェクト表現のバイト数を返します。オペランドは、評価されない式か、括弧で囲まれた型 ID です。sizeof 演算子は、関数または不完全な型を持つ式、すべての列挙子が宣言される前の列挙型、そのような型の括弧で囲まれた名前、またはビットフィールドを指定する左辺値には適用されません。sizeof(char)、sizeof(signed char)、および sizeof(unsigned char) は 1 です。その他の基本型 (3.9.1) に適用される sizeof の結果は実装定義です。[注: 特に、sizeof(bool) と sizeof(wchar_t) は実装定義です。74) — 終わりの注] [注: バイトの定義については 1.7 を、オブジェクト表現の定義については 3.9 を参照してください。—終わりのメモ]
(私のものを強調)
C++ 標準は、各型 (char を受け入れる) のサイズを標準化するのではなく、相互に関連するサイズの違いを標準化します。
A char has to be 1 byte.
A short has to be >= to a char.
An int has to be >= to a short.
A long has to be >= to an int.
and a long long has to be >= to a long.
float 型も同様です。
現在、ほとんどのコンパイラは最大 8 バイトの整数をサポートしていると思います
ただし、事実として、ほとんどではないにしても、16 バイト整数を持たないものがあることを知っています。
また、ほとんどのコンパイラで動作する 16 バイト整数をエミュレートするために人々が開発したオブジェクト クラス/構造体がいくつかあると思います。