「通常の算術変換」と「整数昇格」は同じものですか? int
「通常の算術変換」は式のオペランドを同じ型にするために使用され、「整数昇格」はtoより小さい型を昇格させるために使用されることを読みましたint
が、MSDNではこれらの概念は両方とも「通常の算術変換」のみ。
1023 次
1 に答える
6
いいえ。
通常の算術変換には、特定の状況下での整数の昇格が含まれますが、これらは 2 つの別個のメカニズムです。
[C++14: 5/10]:
算術型または列挙型のオペランドを予期する多くの二項演算子は、同様の方法で変換を行い、結果の型を生成します。目的は、結果の型でもある共通の型を生成することです。このパターンは通常の算術変換と呼ばれ、次のように定義されます。
- いずれかのオペランドがスコープ列挙型 (7.2) の場合、変換は実行されません。他のオペランドが同じ型でない場合、式は不適切な形式です。
- いずれかのオペランドが 型の
long double
場合、もう一方は に変換されlong double
ます。- それ以外の場合、いずれかのオペランドが
double
の場合、もう一方は に変換されdouble
ます。- それ以外の場合、いずれかのオペランドが
float
の場合、もう一方は に変換されfloat
ます。- それ以外の場合、両方のオペランドで整数昇格 (4.5) が実行されます。61次に、次の規則が昇格されたオペランドに適用されます。
- 両方のオペランドが同じ型の場合、それ以上の変換は必要ありません。
- それ以外の場合、両方のオペランドが符号付き整数型であるか、両方が符号なし整数型である場合、整数変換ランクの小さい型のオペランドは、ランクの大きいオペランドの型に変換されます。
- それ以外の場合、符号なし整数型を持つオペランドのランクが他のオペランドの型のランク以上である場合、符号付き整数型を持つオペランドは、符号なし整数型を持つオペランドの型に変換されます。
- それ以外の場合、符号付き整数型のオペランドの型が符号なし整数型のオペランドの型のすべての値を表すことができる場合、符号なし整数型のオペランドは符号付き整数型のオペランドの型に変換されます。
- それ以外の場合、両方のオペランドは、符号付き整数型のオペランドの型に対応する符号なし整数型に変換されます。
文言は C11 とほとんど同じです。
整数昇格は、通常の算術変換とは関係のない状況でも実行される可能性があることに注意してください。たとえば、ビット シフトの LHS オペランドです。最終的に、これらすべてが 2 つのメカニズムに独自の名前が付けられている理由です。
于 2015-01-25T23:46:45.640 に答える