constexpr – funktioner med konstanta uttryck

I C++-11 introduceras det reserverade ordet constexpr. Med det kan en funktion deklareras som exekveras vid kompileringen, så det blir som en konstant. Det kan se ut så här:

constexpr int doubleIt(int x) {return x * 2;}

Funktionen ovan dubblerar sitt argument. Eftersom den är deklarerad constexpr så kan den t.ex. användas där vi bara kan använda konstanter:

char char_array[doubleIt(6)];

Det finns förstås begränsningar i vad som kan deklareras som constexpr. Allt kan ju inte beräknas redan vid kompileringen. Det är så här: Funktionskroppen skall bestå av en enda retur-sats, ”return expression;”, där uttrycket bara får referera till andra uttryck av typen constexpr.

Det här kan kännas begränsande men notera att man kan anropa funktioner, till och med rekursiva funktioner, samt använda villkorsoperatorn ”?”. Rätt komplexa uttryck kan trots allt skapas med dessa enkla byggelement.

En constexpr-funktion behöver inte bara användas vid kompileringen. Om den används med argument som inte är konstanta så beräknas den vid exekveringen som vanligt.

 

Publicerad i C/C++

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com