constexpr on C++11 -ohjelmointikielistandardissa käyttöön otettu tyyppimäärittäjä , joka ilmaisee vakiolausekkeita , jotka voidaan arvioida koodin käännösaikana [1] . Aluksi C++11-kielistandardi asetti käytölle useita merkittäviä ehtoja ja rajoituksia, mutta suurin osa niistä poistettiin C++14 -standardin julkaisun jälkeen [2] .
Määrittelijä , joka on samanlainen kuin C++98constexpr :sta peritty määrittäjä , voidaan käyttää muuttujien suhteen , mutta niiden lisäksi sitä voidaan käyttää myös funktiomäärittelyissä ja luokkakonstruktoreissa . Mahdollisten toimenpiteiden ilmoittaminen spesifikaattorilla tarkoittaa, että niiden arviointi voidaan suorittaa yksinkertaistetusti koodin käännösvaiheessa. Tämä asettaa heille useita merkittäviä rajoituksia, esimerkiksi dynaamisen muistin käytön kieltäminen tai poikkeusten heittäminen [3] . Lisäksi palautusarvon laskentaconstconstexprconstexpr-funktio on taattu käännösaikana vain, jos sen argumentit ovat vakiolausekkeita ja konteksti, jossa palautusarvoa käytetään, sallii käännösaikavakion olemassaolon. Muussa tapauksessa funktio laskee palautusarvonsa koodin suoritusvaiheessa [4] .
-konstruktoreiden ilmoituksen constexprtulee olla triviaali, ja niiden kutsumisen tulos on käännöshetkellä luotuja vain luku -objekteja [5] . Toisin kuin constexpr-lausekkeet, määritteen kanssa ilmoitetut vakiot constvoidaan alustaa ajon aikana [4] .
C++14-standardista constexprlähtien -funktiot ovat pystyneet käyttämään sisäisesti useimpia tavallisen C++-koodin [6] ohjausrakenteita .
C++11- ja C++14-standardeissa käytettäessä staattisia constexprluokan jäseniä niiden deklaraatiota luokan rungossa piti täydentää sen constexprulkopuolella olevien -muuttujien määritelmällä. C++17 -standardista alkaen on kuitenkin pidetty luokan sisällä olevien -muuttujien constexprmäärittelyä niiden määritelmänä ja ulkopuolisia lisämäärityksiä on käsitelty redundanttina [7] .
Standardin C++17 -versiossa kaikki lambda-funktiot , jotka täyttävät constexpr-funktioiden ehdot, sijoitetaan implisiittisesti constexpr-lausekeluokkaan [5] .