私は本を読んでいます(C ++プログラミング言語Stroustrup第4版)。以下のように初期化に関連するセクションで与えられた例:
void f(double d, int i)
{
int a{ d }; // error : possible truncation
char b{ i }; // error : possible narrowing
}
切り捨てと絞り込みの違いは正確には何ですか?
ナローイング変換とは、基本的に、情報の損失を引き起こす可能性のある変換です。厳密に言えば、絞り込み変換は次のとおりです。
暗黙の変換
- 浮動小数点型から整数型へ、または
- long doubleからdoubleまたはfloat、またはdoubleからfloat。ただし、ソースが定数式であり、変換後の実際の値が表現可能な値の範囲内にある場合(正確に表現できない場合でも)、または
- ソースが定数式であり、変換後の実際の値がターゲットタイプに適合し、元のタイプに変換して元の値を生成する場合を除いて、整数型またはスコープなしの列挙型から浮動小数点型へ、または
- 整数型またはスコープなしの列挙型から、元の型のすべての値を表すことができない整数型へ。ただし、ソースが定数式であり、整数昇格後の値がターゲット型に適合する場合を除きます。
- ポインタ型またはポインタからメンバーへの型からboolへ。
これは、投稿した両方のコンバージョンがコンバージョンを絞り込んでいることを意味していることに注意してください。int a{ d };
は最初のケースでchar b{ i };
あり、4番目のケースです。
切り捨ては、浮動小数点型と整数型の間で変換する場合にのみ発生します。これは通常、失われる浮動小数点数の小数部分を指します(ソース)。これは、切り捨てが絞り込みコンバージョンのサブセットであることを意味します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加