Tipo de Dado Void
Deslize para mostrar o menu
Você sempre deve especificar o tipo porque é uma linguagem de tipagem estática. O compilador precisa saber o tipo exato de cada variável para alocar a quantidade correta de memória e garantir a segurança de tipos. Também é necessário conhecer os tipos dos valores de retorno e dos parâmetros das funções.
Uma linguagem de tipagem estática é aquela em que o tipo de dado de uma variável é explicitamente declarado e garantido pelo compilador.
main.cpp
12345678910#include <iostream> // Let's consider a simple example. // Imagine you need to create a function that logs something in console. // What type should it return? ___ log(std::string message) { std::cout << message; return ___; }
Neste caso, não é necessário um tipo de retorno específico; pode ser int, double, float ou bool. Para este cenário, o tipo exato não importa. Na verdade, e se não precisarmos retornar nada?
Void como Tipo de Retorno de Função
Frequentemente, existem funções que parecem não precisar retornar nada, como:
main.cpp
12345678// Outputting information in console ___ log(std::string message) { std::cout << message; } // Updating values of variables ___ update(int& variable, int new_value) { variable = new_value; } // Calling another function ___ closeFile(std::fstream& file) { file.close(); }
Neste caso, podemos utilizar o tipo de dado void. O tipo de dado void em programação indica a ausência de qualquer valor ou tipo. Ele pode ser utilizado de diversas formas, mas em funções é geralmente usado para indicar que uma função não retorna nenhum valor.
main.cpp
123456789101112#include <iostream> void log(std::string message) { std::cout << message; return; } int main() { log("This is a void function!"); }
Nota
Utilizamos a palavra-chave
return, mas não passamos nenhum valor. A palavra-chavereturntambém pode ser omitida em funçõesvoid. Experimente removê-la no exemplo.
Void como um Ponteiro
Ponteiros void (void*) são ponteiros que não possuem um tipo de dado específico associado a eles. Eles podem apontar para qualquer tipo de objeto, mas é necessário convertê-los para o tipo apropriado antes de utilizá-los. São bastante úteis, mas às vezes difíceis de compreender.
main.cpp
1234567891011121314#include <iostream> int main() { int num = 10; // Here we are creating a void pointer // Now it can point to any variable of any data type // You can try changing the type of `num` from `int` to `float` void* ptr = # // To use this pointer, we need to cast it to the appropriate type // VVV int* intPtr = static_cast<int*>(ptr); std::cout << *intPtr << std::endl; // Output: 10 }
Neste exemplo, ptr é um ponteiro void que aponta para um inteiro (num). Em seguida, convertemos ptr para um ponteiro int* para acessar e exibir o valor de num.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo