Почему это работает, когда в функции отсутствует оператор возврата в конце? [Дубликат]

На этот вопрос уже есть ответ здесь:

Почему этот фрагмент кода C ++ компилируется (не-void функция не возвращает значение) [duplicate] 7 ответов

Я изучаю C ++. Приведенные ниже коды смутили меня:

int test_return(int a)
{
    for (int i = 40; i < 44; i++)
    {
        if (i == a)
        {
            cout << "return here with i: " << i << endl;
      ,      return 59;
        }
    }
}

int main()
{
    cout << "in main: " << test_return(61) << endl;
    return 0;
}

Я знаю, что мне не хватает оператора возврата в конце функцииtest_return.

Но компилятор не сообщает об ошибке, и он работает, когда выполняется.

Поэтому я выбираю некоторые конкретные цифры, такие как40,44,59,61 чтобы увидеть, какая функцияtest_return выберу, чтобы вернуться.

Я пробовал несколько раз, выход всегда такой:

in main: 44

Кажется, что функцияtest_return вернул интi до того, как закончилось заявление.

Мой вопрос:

Это законно?

Как это работает?

Обновить:

Я добавляю эти коды в конце функцииtest_return:

int i = 100;
int square = i * i;

Выходит:

in main: 10000

Спасибо за @Vlad от московского ответа! Это помогает.

Ответы на вопрос(2)

Ваш ответ на вопрос