char、int、long double ...のsizeは、コンパイラごとに異なる可能性があります。しかし、C ++ 11またはC11標準に従って、符号付きと符号なしの基本積分型のサイズが同じであるという保証はありますか?
2 に答える
C ++ 11標準では、整数型について次のように述べています。
(§3.9.1/ 3)標準の符号付き整数型ごとに、対応する(ただし異なる)標準の符号なし整数型が存在します:「unsignedchar」、「unsigned short int」、「unsigned int」、「unsignedlongint」 」、および「unsigned long long int」。それぞれが同じ量のストレージを占有し、対応する符号付き整数型と同じアライメント要件(3.11)を持ちます。つまり、各符号付き整数型は、対応する符号なし整数型と同じオブジェクト表現を持ちます。同様に、拡張符号付き整数型のそれぞれについて、同じ量のストレージとアライメント要件を持つ対応する拡張符号なし整数型が存在します。[...]
だから答えはイエスです。
C11の場合、ここに対応するステートメントがあります(これはN1570からのものです)。
(§6.2.5/ 6)符号付き整数型ごとに、同じ量のストレージ(符号情報を含む)を使用し、同じ量の対応する(ただし異なる)符号なし整数型(キーワードunsignedで指定)がありますアライメント要件[...]
はい、 unsignedは範囲を拡大するためにsigned typeの負の数のスペースのみを使用するため、 sizeof(signed type)がsizeof(unsigned type)と等しいという完全な保証があります。