A constexpr a C++11 programozási nyelvi szabványban bevezetett típusspecifikátor a kódfordítási időben kiértékelhető konstans kifejezések jelölésére [1] . Kezdetben a C++11 nyelvi szabvány számos jelentős feltételt és korlátozást támasztott a használatára vonatkozóan, de ezek többsége a C++14 szabvány megjelenése után megszűnt [2] .
A specifikátor, hasonlóan a C++98constexpr - ból örökölt specifikátorhoz , használható változókra vonatkozóan , de ezek mellett függvénydeklarációkban és osztálykonstruktorokban is használható . Bármely eljárás specifikálóval történő deklarálása azt jelenti, hogy azok kiértékelése egyszerűsített módon elvégezhető a kódösszeállítás szakaszában. Ez számos jelentős korlátozást ró rájuk, például a dinamikus memória használatának megengedhetetlensége vagy a kivételek dobása [3] . Ezenkívül a visszatérési érték kiszámításaconstconstexprconstexprA -függvény csak akkor garantált a fordítási időben, ha argumentumai konstans kifejezések, és a visszatérési érték felhasználási környezete lehetővé teszi a fordítási idő állandó jelenlétét. Ellenkező esetben a függvény kiszámítja a visszatérési értékét a kódvégrehajtás szakaszában [4] .
A -konstruktorok deklarációjának constexprtriviálisnak kell lennie, és a meghívásuk eredménye a fordítási időben létrehozott csak olvasható objektumok [5] . A constexpr-kifejezésekkel ellentétben a specifikátorral deklarált konstansok constfutás közben inicializálhatók [4] .
A C++14 szabvány óta a constexpr-függvények képesek voltak belsőleg használni a legtöbb szabályos C++ kód [6] vezérlőstruktúráját .
A C++11 és C++14 szabványban statikus constexprosztálytagok használatakor az osztálytörzsben való deklarációjukat ki kellett volna egészíteni a constexprrajta kívüli -változók definíciójával. A C++17 szabványtól kezdve azonban az osztályon belüli -változók deklarációját constexprtekintettük definíciójuknak, és minden további definíciót kívül redundánsnak [7] .
A szabvány C++17 változatában minden lambda függvény , amely megfelel a constexpr-függvények feltételeinek, implicit módon a constexpr-kifejezési osztályba kerül [5] .