Это то, что называется неопределенное поведение . Все может случиться.
C ++ не требует, чтобы вы всегда возвращали значение в конце функции, потому что возможно написать код, который туда никогда не попадет:
int fff ( int a , int b )
{
if (a>b )
return 0;
else return a+b;
// still no return at end of function
// syntactically, just as bad as original example
// semantically, nothing bad can happen
}
Однако компилятор не может определить, не дойдете ли вы до конца функции, и самое большее, что он может сделать, это выдать предупреждение. Это зависит от вас, чтобы не упасть с конца без return
.
И если вы это сделаете, вы можете получить случайное значение или вылететь.