Еще один рекурсивный факториал с Java 8
public static int factorial(int i) {
final UnaryOperator<Integer> func = x -> x == 0 ? 1 : x * factorial(x - 1);
return func.apply(i);
}
3.6.1 Основных функций
....
2 реализация не должна предопределять эти
main
функция. Эта функция не должна быть перегружена. Это должно иметь тип возврата типаint
, но иначе его тип определяется реализацией. Все реализации должны позволить оба из следующих определений основного:int main() { /* ... */ }
и
int main(int argc, char* argv[]) { /* ... */ }
.... и это продолжает добавлять...
5 А
return
оператор вmain
имеет эффект отъезда основной функции (уничтожающий любые объекты с продолжительностью автоматического хранения) и звонящийexit
с возвращаемым значением как аргумент. , Если управление достигает концаmain
, не встречаясь с оператором возврата, эффект является эффектом выполняющегося возврата 0 ;
попытка найти копию онлайн стандарта C++, таким образом, я мог заключить этот отрывок в кавычки, я нашел сообщение в блоге, которое заключает все правильные биты в кавычки лучше, чем, я мог.
Это - часть стандарта языка C++. Неявный возврат 0 сгенерирован для Вас, если нет никакого явного оператора возврата в основном.
Я - вполне уверенный VC ++, просто вставляет возврат 0, если Вы не включаете один в основные функции. То же самое может произойти с функциями также, но в тех случаях, по крайней мере, Вы получите предупреждение.
Раздел 6.6.3 / 2 гласит: «Вытекание конца функции эквивалентно возврату без значения; это приводит к неопределенному поведению в функции, возвращающей значение».
Примером является приведенный ниже код, который в лучшем случае выдает предупреждение о VS 2010 / g ++
int f(){
if(0){
if(1)
return true;
}
}
int main(){
f();
}
Итак, все дело в том, что «main» особенный, как указывалось в предыдущих ответах.