6

64ビットでGCCを使用してC++プログラムをコンパイルしています-machine/OS /(-m64オプションをに渡してg++)。予想通り、sizeof(long double) == 16–整数の16バイト長の標準タイプがあるかどうか疑問に思っていますか?

PS__int128_tは、私が理解したように、標準タイプをエミュレートする人工的な拡張機能です。それ以外は何も見つかりませんでした。

4

2 に答える 2

2

いいえ、保証されたサイズのみがcharunsigned 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 を参照してください。—終わりのメモ]

(私のものを強調)

于 2012-09-18T23:02:41.953 に答える
1

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 バイト整数をエミュレートするために人々が開発したオブジェクト クラス/構造体がいくつかあると思います。

于 2016-05-29T00:20:01.707 に答える