constexprlaskennan
constexprlaskennan on C++-kielessä käsite, jolla tarkoitetaan laskennan suorittamista käännösaikana käyttämällä constexpr-merkintää. Sen tavoitteena on tuottaa arvoja jo ennen ohjelman suoritusta, jolloin osa laskuista voidaan ratkaista statisesti. Tämä auttaa sekä minimoi ajonaikaista laskentaa että mahdollistaa sitomisen muuttujiin, joita tarvitsee esimerkiksi tyyppimäärityksissä tai staattisessa konfiguroinnissa.
- Compile-time evaluointi: Arvon on oltava ratkaistavissa käännösaikana, jotta sitä voidaan käyttää konteksteissa, joissa tarvitaan kiinteää arvoa.
- constexpr-funktiot ja -muuttujat: Funktioiden on oltava merkitty constexpr, ja niiden sisällä on oltava sallitut operaatioita. Ne
- Rajoitteet: Sivuvaikutteiset toiminnot, kuten I/O, muistin varaaminen dynamicisesti ja muuttuvien tilojen muuttaminen eivät yleensä ole sallittuja
- Kiinteiden taulukkojen kokojen määrittäminen ja taulukkojen koko, joka tarvitsee kiinteän arvoa jo käännösaikana.
- Monimutkaisempien arvojen rakentaminen ilman suoritusajan laskentaa, esimerkiksi laskentakaavojen tai konfiguraatioarvojen tuottaminen.
- Template-metaprogrammingin tukeminen, missä arvoja generoidaan jo etukäteen.
constexpr int square(int x) { return x * x; }
constexpr int s = square(n); // s on ratkaistu käännösaikana
int arr[s]; // taulukko, jonka koko on kiinteä ja käytettävissä compile-time
Constexpr-rajoitteet ovat kehittyneet C++-standardien kehityksen myötä. Alun perin huomattavan yksinkertaisia, nykyaikaiset standardit sallivat yhä monimutkaisempia funktioita