プリミティブリテラルでautoを使用して宣言した変数を初期化すると、結果は次のように定義されます。autoで変数を宣言し、プリミティブなリテラル定義の動作で初期化していますか?
auto i = 6; // Is this always going to evaluate to a int?
// Or could it evaluate to some similar type like short?
プリミティブリテラルでautoを使用して宣言した変数を初期化すると、結果は次のように定義されます。autoで変数を宣言し、プリミティブなリテラル定義の動作で初期化していますか?
auto i = 6; // Is this always going to evaluate to a int?
// Or could it evaluate to some similar type like short?
整数型のタイプ6
は、hereを確認できるので、intです。 cppreference.comから次に
、:変数の場合
、自動は が宣言されている変数の型が自動的にその初期化子から推論されることを指定します。
6
がint型の種類を持っているので
のでi
は、int型の種類があります。
この動作は完全に明確です。
あなたは[cppreference.com](http://www.cppreference.com)を意味すると思いますが、cpp.reference.comは存在しません。 – Bim
@Bim yeah、間違いなく!ありがとうございました! –
はい、これはまさにauto
の対象です。
たとえば、auto i;
は意味がありません。コンパイラは6
を使用して型を推定します。 6
は整数リテラルです。
申し訳ありませんが、質問が明確ではなかったと思いますが、それをintに評価することは保証されていますか?コンパイラを使うこともできますが、それは短いか長いと評価されますか? – Geoff
@Georgeはい、 '6'は整数リテラルなので' int'に保証されています。 –
はい、すべてのリテラルに明確な型があるためです。リテラル6
のタイプはint
です。したがって、auto
はint
に翻訳されます。
int
が16または32ビットの長さの場合は実装が定義されていますが、これは未定義のビヘイビアを生成しません。プログラム全体の同じint
の長さが同じであるためです。それに加えて、アーキテクチャに応じてint
の長さにかかわらず、6はshort
またはlong
ではなくint
です。
よく定義されています。 Btw; –