Функции не обязаны возвращать значение. Чтобы сообщить компилятору, что функция не возвращает значение, используется тип возвращаемого значения
void
. Давайте посмотрим на функцию
doPrint()
из предыдущего урока:
void doPrint() // void is the return type
{
std::cout << "In doPrint()" << '\n';
// Эта функция не возвращает значение, поэтому инструкция return не требуется
}
Эта функция имеет тип возвращаемого значения void
, что указывает на то, что она не возвращает значение вызывающей стороне. Поскольку она не возвращает значение, инструкция return
не требуется (попытка вернуть конкретное значение из функции с типом возврата void
приведет к ошибке компиляции).
Вот еще один пример функции, ничего не возвращающей, и пример программы, которая ее вызывает:
#include <iostream>
// void означает, что функция не возвращает значение вызывающей стороне
void returnNothing()
{
std::cout << "Hi" << '\n';
// Эта функция не возвращает значение, поэтому инструкция return не требуется
}
int main()
{
returnNothing(); // хорошо: вызывается функция returnNothing(), значение не возвращается
std::cout << returnNothing(); // ошибка: эта строка не компилируется.
// Вам нужно будет закомментировать ее, чтобы продолжить.
return 0;
}
При первом вызове функции returnNothing
функция печатает «Hi», а затем ничего не возвращает вызывающей функции. Управление возвращается в main
, и программа продолжает выполнение.
Второй вызов функции returnNothing
даже не будет компилироваться. Функция returnNothing
имеет возвращаемый тип void
, то есть не возвращает значения. Однако эта инструкция пытается отправить возвращаемое из returnNothing
значение в std::cout
для печати. std::cout
не знает, что с этим делать (какое значение он будет выводить?). Следовательно, компилятор пометит это как ошибку. Вам нужно закомментировать эту строку кода, чтобы код компилировался.
Тип возврата void
(что означает, что ничего не возвращается) используется, когда нам нужна функция, которая ничего не возвращает вызывающей стороне (потому что в этом нет необходимости). В приведенном выше примере у функции returnNothing
есть полезное поведение (она печатает «Hi»), но ей не нужно ничего возвращать вызывающей стороне (в данном случае main
). Следовательно, функции returnNothing
присваивается возвращаемый тип void
.