、unsigned short + intの型は実装定義ですか?このコードを考えると
unsigned short us = 0;
int i = 0;
auto sum = us + i;
がsum
実装定義のタイプですか? C++ 11標準の私の読書は、yesと答えています。
- 5.7/1は、通常の算術変換が適用されると言います。
- 4.13/1の箇条書き2と3は、intのランクが、符号なしの短いランクよりも大きいと言います。
- 5/9 bullet 5 subbullet 4は、intがunsigned shortのすべての値を表すことができる場合、unsigned shortがintに変換され、
sum
の型がintであることを示します。 - 5/9 bullet 5 subbullet 5では、intがunsigned shortのすべての値を表すことができない場合、両方のオペランドがunsigned intに変換され、
sum
の型はunsigned intになります。
上記の分析が正当である場合、それは内蔵型に算術式を使用して初期化変数を宣言するauto
を使用して実装定義結果をもたらすことができることを意味します。私はそれが上記のsum
のタイプが完全に標準によって決定されていないと多くのプログラマーを驚かせるだろうと思っています。
私の推論は正当なものですか?
あなたのプラットフォームのタイプ特性を調べた後、それは「完全に決定」されています... –
これは標準によって完全には決定されていないことを意味します:-) – KnowItAllWannabe
別の言い方をすれば、算術変換のセクション全体を投げ捨て、実際の結果タイプを示す単純な行列で置き換えることができます。あなたの 'sum'は、' std :: common_type :: type'という型を持っています。 –