2016-10-21 2 views
1

Если я инициализирую переменную, объявленную с использованием auto с примитивным литералом, будут определены результаты, например.Объявляет переменную с авто и инициализацией с определением примитивного литерала?

auto i = 6; // Is this always going to evaluate to a int? 
      // Or could it evaluate to some similar type like short? 
+0

Это четко определено. Btw; вы могли бы просто посмотреть его в стандарте ;-) –

ответ

5

Тип целочисленного литерала 6 is int, как вы можете проверить here.

Тогда из cppreference.com:

Для переменных, авто указывает, что тип переменной, являющейся объявленную будет автоматически выведен из его инициализаторе.

Так i будет иметь тип ИНТ, потому что 6 имеет тип Int.

И это поведение абсолютно четко определено.

+0

Я думаю, вы имеете в виду [cppreference.com] (http://www.cppreference.com), cpp.reference.com не существует. – Bim

+0

@Bim да, определенно! Спасибо! –

2

Да, это именно то, что auto для.

Например, auto i; не имеет смысла. Компилятор использует 6 для вывода типа. И 6 - целочисленный литерал.

+0

Извините, я думаю, вопрос был не ясен, гарантированно ли он оценивать int? Или можно использовать некоторые компиляторы, он оценивается до короткого или длинного? – Geoff

+1

@George Да, гарантированный 'int', потому что' 6' является целым литералом. –

1

Да, поскольку каждый литерал имеет четко определенный тип. Тип литерала 6: int. Итак, ваш auto будет переведен в int.

Если int имеет длину 16 или 32 бита, это реализация определена, но это не создает неопределенное поведение, потому что каждый простой int через вашу программу имеет одинаковую длину. Кроме того, независимо от длины int в соответствии с вашей архитектурой, 6 является int, а не short или long.

Смежные вопросы