Следует ли избегать использования основного типа возврата?

В приведенном ниже примере кода функция main написана с типом записи возвращаемого типа С++ 11:

auto main() -> int {
  //...
  return 0;
}

Вопрос:

Есть ли причины, по которым main с типом возвращаемого типа следует избегать, и классическое обозначение должно быть предпочтительным?

Ответ 1

Он отлично действует и работает отлично.

Единственная проблема, которую нужно учитывать, это то, что она новая. Это может запутать или удивить читателей вашего кода, которые знакомы только с С++ 98.

Но это работает, поэтому не стесняйтесь писать свой main таким образом, если вам это нравится.

Ответ 2

Во-первых, давайте посмотрим, почему вы хотели бы использовать трейлинг-возвращаемые типы в целом.

Комментарий Kerrek SB к предыдущему вопросу:

Обратные типы возврата - это специализированная функция языка, которая в основном полезно для родовых библиотек (т.е. писателей родовых библиотеки, а не общие личности, которые, похоже, пишут библиотеки), аналогично decltype. Кстати, оба языка также имеют ограниченное использование в неясных или длинных лямбда-выражениях, но они не должны использоваться много в "нормальном" коде пользователя.

Из Ответ Дитмара Кюля (который вы связали в своем предыдущем вопросе, чтобы вы его прочитали):

Значение возвращаемых возвращаемых типов в основном относится к функции шаблон, где теперь можно использовать параметры для функции вместе с decltype(), чтобы определить тип возврата. Например:

template <typename M, typename N>
auto multiply(M const& m, N const& n) -> decltype(m * n);

Это объявляет функцию multiply() для возврата типа, созданного m * n. Использование decltype() перед multiply() было бы неверным, поскольку m и n пока не объявлены.

Я рассматриваю как экспертов Kerrek SB, так и Dietmar Kühl С++ и нахожу их рекомендации хорошими. Теперь рассмотрим, как вышеприведенные рекомендации относятся к int main(). Некоторые наблюдения:

  • int main() не является шаблоном функции.
  • Вычисление типа не происходит.
  • Тип возврата (int) не изменится в обозримом будущем; мы можем с уверенностью заявить об этом.

Существуют ли какие-либо причины, по которым основной тип возвращаемого типа следует избегать, и классическое обозначение должно быть предпочтительным?

Да:

  • Это смущает тех разработчиков, которые не знакомы с новыми синтаксис.

  • Не все инструменты поддерживают эту новую языковую функцию.

  • Как обсуждалось выше, использование этой функции не требуется с помощью int main().

Я оставлю свой случай.

Ответ 3

Это просто глупо.

Нет никакой выгоды, нет необходимости или причины писать что-то вроде этого.

Чтобы быть педантичным, вы без каких-либо причин добавляете символ auto и ->.

Возвращаемый тип возврата обычно используется для вывода типа возврата после аргументов функции. Здесь вы уже знаете тип возврата.

Можете ли вы представить (внешний вид) свою базу кода, если все ваши функции использовали это обозначение без необходимости делать это? Вы фактически сохранили на фронте все хранилища, спецификации характеристик, статические и т.д. И оставите тип возврата в конце, чтобы смешаться с спецификациями исключений, спецификаторами констант и друзьями?


Люди, которых вам не нужно убеждать. Я не против возвратных типов возврата; Я против менталитета "nouveau riche" использования функций, в которых нет необходимости делать это, и обеспокоен тем, что С++ становится огромным стилем стилей и рушится под собственным весом.

Легкие сердечные сдвиги нормы - признаки неуверенности и отсутствия связи. Особенность, такая как Python PEP8, будет хорошей вещью, чтобы иметь и обученные глаза следует отбросить с осторожностью.