Досрочный выход из функции в C++
После того, как выполнится инструкция return, функция
закончит свою работу. То есть после выполнения return больше
никакой код не выполнится.
Смотрите пример:
#include <iostream>
int func(int num) {
return num * num;
std::cout << "!\n"; // этот код никогда не выполнится
}
int main() {
int res = func(3);
std::cout << res << "\n"; // выведет 9
return 0;
}
Это не значит, что в функции должен быть один return. Но
выполнится только один из них.
В следующем примере в зависимости от значения параметра выполнится
либо первый, либо второй return:
#include <iostream>
#include <string>
std::string func(int num) {
if (num >= 0) {
return "+";
} else {
return "-";
}
}
int main() {
std::cout << func(3) << "\n"; // выведет '+'
std::cout << func(-3) << "\n"; // выведет '-'
return 0;
}
Пусть у нас есть функция, возвращающая сумму чисел от 1 до
5:
#include <iostream>
int func() {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
return sum;
}
int main() {
int res = func();
std::cout << res << "\n"; // выведет 15
return 0;
}
Пусть теперь мы расположим return внутри цикла, вот так:
#include <iostream>
int func() {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
return sum;
}
return sum; // сюда выполнение не дойдет
}
int main() {
int res = func();
std::cout << res << "\n"; // выведет 1
return 0;
}
В этом случае цикл прокрутится лишь одну итерацию и произойдет
автоматический выход из функции (ну и заодно из цикла). А за одну
итерацию цикла в переменной sum окажется лишь число
1, а не вся нужная сумма.
То, что return расположен внутри цикла, не всегда может
быть ошибкой.
В следующем примере сделана функция, которая определяет, сколько
первых чисел, начиная с 1, нужно сложить, чтобы сумма стала
больше или равна 10:
#include <iostream>
int func() {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
// Если сумма больше или равна 10:
if (sum >= 10) {
return i; // выходим из цикла и из функции
}
}
return 0; // если порог не достигнут
}
int main() {
int res = func();
std::cout << res << "\n"; // выведет 4
return 0;
}
А в следующем примере сделана функция, которая вычисляет, сколько
целых чисел, начиная с 1, нужно сложить, чтобы результат
был больше 100:
#include <iostream>
int func() {
int sum = 0;
int i = 1;
while (true) { // бесконечный цикл
sum += i;
if (sum >= 100) {
return i; // цикл крутится пока не выйдет тут
}
i++;
}
}
int main() {
std::cout << func() << "\n"; // выведет 14
return 0;
}
Что выведется в консоль в результате выполнения следующего кода:
#include <iostream>
int func(int num1) {
return num1;
int num2 = num1 * num1;
return num2;
}
int main() {
std::cout << func(3) << "\n";
return 0;
}
Объясните почему.
Что выведет каждый из std::cout в результате выполнения
следующего кода:
#include <iostream>
#include <cstdlib>
int func(int num) {
if (num <= 0) {
return std::abs(num);
} else {
return num * num;
}
}
int main() {
std::cout << func(10) << "\n";
std::cout << func(-5) << "\n";
return 0;
}
Объясните почему.
Что выведет каждый из std::cout в результате выполнения
следующего кода:
#include <iostream>
#include <cstdlib>
int func(int num) {
if (num <= 0) {
return std::abs(num);
}
return num * num;
}
int main() {
std::cout << func(10) << "\n";
std::cout << func(-5) << "\n";
return 0;
}
Объясните почему.
Что выведется в консоль в результате выполнения следующего кода:
#include <iostream>
int func(int num1) {
int num2 = 0;
for (int i = 1; i <= num1; i++) {
num2 += i;
return num2;
}
return num2;
}
int main() {
std::cout << func(5) << "\n";
return 0;
}
Объясните почему.
Что хотел сделать автор данного кода? Исправьте ошибку автора.
Напишите функцию, которая параметром будет принимать число и
делить его на 2 столько раз, пока результат не станет
меньше 10. Пусть функция возвращает количество итераций,
которое потребовалось для достижения результата.