Будет ли автоматический вывод типа вывода на главную работу?
Смогу ли я сделать следующее для основной функции в C ++ 1y (C ++ 14):
auto main() { // ... }
Таким образом, тип возвращаемого значения автоматически будет int
хотя нам не нужно использовать явный return 0;
?
- Реализация C ++ 14 make_integer_sequence
- Есть ли название для этой именования создания кортежа?
- Удаленный конструктор по умолчанию. Объекты все еще могут быть созданы ... иногда
- Инициализация агрегатов C ++ 11 для classов с нестационарными инициализаторами элементов
- Почему в версии C ++ 14 было изменено 1 << 31?
- Являются ли примечания и примеры в спецификации основного языка Стандарта C ++ ненормативными?
- Самоинициализация статической переменной constexpr, хорошо ли она сформирована?
- Является ли это совместимым расширением компилятора для обработки стандартных библиотечных функций, отличных от constexpr, как constexpr?
- Как реализовать функцию make_unique в C ++ 11?
- Ошибка компилятора C ++ C2280 «попытка ссылки на удаленную функцию» в Visual Studio 2013 и 2015
- Как реализовать classические алгоритмы сортировки в современном C ++?
- Вызов конструктора initializer_list через make_unique / make_shared
- Когда следует использовать автоматический возврат типа C ++ 14?
Нет, это не допустимо. В пункте 7.1.6.4/10 Стандартного проекта C ++ 14 N3690 указывается:
Если функция с объявленным типом возвращаемого типа, использующая тип-заполнитель, не имеет операторов возврата, тип возвращаемого значения выводится как результат из оператора
return
без операнда в закрывающей фигурной скобке тела функции. […]
Это означает, что исключение оператора return
в main()
сделает его тип void
.
Специальное правило, введенное в пункте 3.6.1 / 5 о выходе из конца main()
указывает:
[…] Если элемент управления достигнет конца
main
не встречает операторreturn
, эффект заключается в выполненииreturn 0;
В формулировке говорится, что «эффект» во время выполнения программы такой же, как если бы было return 0
, а не что оператор return
будет добавлен в программу (что повлияет на вычет типа в соответствии с цитируемым абзацем).
РЕДАКТИРОВАТЬ:
Для этого есть отчет о дефекте ( любезно предоставлен Йоханнесом Шаубом ):
Предлагаемая резолюция (ноябрь 2013 года):
Измените 3.6.1 [basic.start.main] пункт 2 следующим образом:
Реализация не должна предопределять основную функцию. Эта функция не должна быть перегружена. Он должен иметь объявленный тип возвращаемого типа типа int, но в противном случае его тип определяется реализацией.
Все реализацииРеализация должна
- функция
()
возвращающаяint
и- функция (
int
, указатель на указатель наchar
), возвращающийint
как тип …