В C++ тип функции означает, какого типа будет значение, возвращаемое функцией. Но если вместо обычного типа перед именем функции стоит спецификатор void, то с ним общее правило не работает. Это спецификатор означает, что у функции нет возвращаемого значения. Как следствие, оператор return, отвечающий за возвращаемое значение, убирается. Рассмотрим пример:
1 2 3 4 5 6 7 8 9 |
void kvad1 (int a, int& b) { b = a * a; } int kvad2 (int a) { return a * a; } |
Обе функции выполняют возведение в квадрат числа, но функция kvad1 принимает b и изменяет его, а kvad2 с помощью оператора return вернет значение в конструкцию вызова данной функции, значение которой присвоят отдельной переменной.
Спецификатор void выполняет и другие функции. Например, в случае декларатора функции, если void стоит на месте параметров функции, это означает, что функция не имеет параметров, при этом имея прототип.
1 |
int kvad3(void); |
Данное использование считается устаревшим и void можно опустить.
Другим, более востребованным способом использования я является объявления указателя.
1 |
void *kv; |
Такому указателю можно присвоить указатель на любой тип, но в обратном случае, требуется явное приведение.
1 2 3 |
kv = &i; int a = (int)kv; |