Void-tietotyyppi
Pyyhkäise näyttääksesi valikon
Tyyppi on aina määriteltävä, koska kyseessä on staattisesti tyypitetty kieli. Kääntäjän on tiedettävä jokaisen muuttujan tarkka tyyppi, jotta se voi varata oikean määrän muistia ja varmistaa tyyppiturvallisuuden. Kääntäjän on myös tiedettävä funktioiden palautusarvojen ja parametrien tyypit.
Staattisesti tyypitetyssä kielessä muuttujan tietotyyppi määritellään ja sitä valvoo kääntäjä.
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 ___; }
Tässä tapauksessa emme tarvitse tiettyä paluuarvon tyyppiä; se voisi olla int, double, float tai bool. Tässä tilanteessa tarkalla tyypillä ei ole merkitystä. Entä jos emme tarvitse palauttaa mitään ollenkaan?
Void funktioiden paluuarvotyyppinä
Usein on funktioita, joiden ei näytä tarvitsevan palauttaa mitään, kuten:
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(); }
Tässä tapauksessa voidaan käyttää void-tietotyyppiä. void-tietotyyppi ohjelmoinnissa ilmaisee, ettei arvoa tai tyyppiä ole. Sitä voidaan käyttää monin eri tavoin, mutta funktioissa sitä käytetään yleensä osoittamaan, ettei funktio palauta arvoa.
main.cpp
123456789101112#include <iostream> void log(std::string message) { std::cout << message; return; } int main() { log("This is a void function!"); }
Huom
Käytimme
return-avainsanaa, mutta emme itse asiassa palauttaneet mitään arvoa.return-avainsanan voi myös jättää poisvoid-funktioissa. Kokeile poistaa se esimerkistä.
Void osoittimena
Void-osoittimet (void*) ovat osoittimia, joilla ei ole tiettyä tietotyyppiä. Ne voivat osoittaa mihin tahansa olioon, mutta ne täytyy tyyppimuuntaa sopivaan tyyppiin ennen käyttöä. Ne ovat erittäin hyödyllisiä, mutta joskus vaikeita ymmärtää.
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 }
Tässä esimerkissä ptr on void-osoitin, joka osoittaa kokonaislukuun (num). Muunnamme sitten ptr:n int*-osoittimeksi, jotta voimme käyttää ja tulostaa num:n arvon.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme