constexpr är en typspecifikation som introduceras i programmeringsspråksstandarden C++11 för att beteckna konstanta uttryck som kan utvärderas vid kodkompileringstid [1] . Inledningsvis införde språkstandarden C++11 ett antal betydande villkor och restriktioner för dess användning, men de flesta av dem togs bort efter utgivningen av C++14- standarden [2] .
Specifieraren , liknande den som constexprärvd från C++98const , kan användas med avseende på variabler , men utöver dem kan den också användas i funktionsdeklarationer och klasskonstruktörer . Att deklarera eventuella procedurer med en specificator constexprinnebär att deras utvärdering kan utföras på ett förenklat sätt vid kodkompileringsstadiet. Detta medför ett antal betydande begränsningar för dem, till exempel att det inte är tillåtet att använda dynamiskt minne eller att göra undantag [3] . Dessutom garanteras kompileringstidsutvärdering av en constexpr-funktions returvärde endast om dess argument är konstanta uttryck, och returvärdets användningskontext tillåter närvaron av en kompileringstidskonstant. Annars kommer funktionen att beräkna sitt returvärde vid kodexekveringsstadiet [4] .
Deklarationen constexprav -konstruktörer bör vara trivial, och resultatet av att anropa dem kommer att vara skrivskyddade objekt skapade vid kompileringstid [5] . Till skillnad från constexpr-uttryck kan konstanter som deklareras med specifikationen constinitieras vid körning [4] .
Sedan C++14-standarden constexprhar -funktioner kunnat använda de flesta av kontrollstrukturerna för vanlig C++-kod [6] internt .
I standarderna C++11 och C++14, när man använder statiska constexprklassmedlemmar, var det meningen att deras deklaration i klasskroppen skulle kompletteras med definitionen constexprav -variabler utanför den. Men med utgångspunkt från C++17 -standarden har deklarationen constexprav -variabler inuti klassen betraktats som deras definition, och varje ytterligare definition utanför har behandlats som redundant [7] .
I C++17 -revisionen av standarden placeras alla lambdafunktioner som uppfyller villkoren för constexpr-funktioner implicit i constexpr-expressionsklassen [5] .