C++11 では、縮小変換の概念が形式化され、リストの初期化で最上位レベルで縮小変換を使用することは許可されていません。
T
との 2 つの型が与えられた場合、 からへU
の変換が縮小されているかどうかを実装定義にすることができるかどうか疑問に思っています。標準の私の読書によれば、これは事実です。これが私の推論です:T
U
- dcl.init.list (8.5.4) パラグラフ 7 によると、変換が縮小される可能性がある 1 つの方法は、「整数型または範囲指定されていない列挙型から、元のすべての値を表すことができない整数型への暗黙的な変換」である場合です。タイプ"。
unsigned int
からへの暗黙的な変換を考えてみましょうlong
。- との相対的なサイズに関しては
int
、long
C++ で必要なのは だけですsizeof(int) <= sizeof(long)
。 - 実装 A を考えてみましょう
sizeof(int) == sizeof(long)
。この実装では、long
のすべての値を表すことができないunsigned int
ため、変換は縮小されます。 - 実装 B を考えてみましょう
sizeof(int) < sizeof(long)
。この実装では、long
のすべての値を表すことができるunsigned int
ため、変換は縮小されません。
私の分析では、変換が縮小しているかどうかは実装で定義できるというのは正しいですか? これは望ましいことですか?