constexpr specifier (seit C++11)
Aus cppreference.com
![]() | This page has been machine-translated from the English version of the wiki using Google Translate. The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
constexpr
- bedeutet, der Wert eines Ausdrucks kann zur Übersetzungszeit berechnet werden.Original:constexpr
- specifies that the value of a variable or function can be computed at compile timeThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
[Bearbeiten]Erklärung
constexpr
Spezifizierer legt fest, dass es möglich sein muss, den Wert des Ausdrucks zur Übersetzungszeit zu berechnen. Der Ausdruck kann dann dort verwendet werden, wo nur zur Kompilierungszeit konstante Ausdrücke erlaubt sind. constexpr bedeutet const .Original:
constexpr
specifier declares that it is possible to evaluate the value of the function or variable at compile time, they then can be used where only compile time konstante Ausdrücke are allowed. constexpr implies const.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
'constexpr Variablen' muss die folgenden Anforderungen erfüllen:
Original:
constexpr variables must satisfy the following requirements:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
- Es muss sofort gebaut werden oder ein Wert zugewiesen .Original:it must be immediately constructed or assigned a value.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - der Konstruktor Parameter oder der Wert zugewiesen werden darf nur literalen Werten,
constexpr
Variablen und Funktionen .Original:the constructor parameters or the value to be assigned must contain only literal values,constexpr
variables and functions.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - der Konstruktor verwendet, um das Objekt (entweder implizit oder explizit) konstruieren müssen den Anforderungen der
constexpr
Konstruktor. Im Falle der expliziten Konstruktor, muss es constexpr angegeben haben .Original:the constructor used to construct the object (either implicit or explicit) must satisfy the requirements ofconstexpr
constructor. In the case of explicit constructor, it must have constexpr specified.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
'constexpr Funktionen' muss die folgenden Anforderungen erfüllen:
Original:
constexpr functions must satisfy the following requirements:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
- es darf nicht virtuellOriginal:it must not be virtualThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - seine Rückkehr Typ muss
LiteralType
seinOriginal:its return type must beLiteralType
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - jeder seiner Parameter müssen wörtliche Typ seinOriginal:each of its parameters must be literal typeThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - die Funktion Körper muss entweder gelöscht oder ausgefallen oder enthalten nur die folgenden:Original:the function body must be either deleted or defaulted or contain only the following:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- null AussagenOriginal:null statementsThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - static_assert ErklärungenOriginal:static_assert declarationsThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. typedef
Erklärungen und Alias Erklärungen, die nicht definieren Klassen oder AufzählungenOriginal:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.- mit ErklärungenOriginal:using declarationsThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - using-DirektivenOriginal:using directivesThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - genau ein
return
Anweisung, die nur literalen Werten,constexpr
Variablen und Funktionen enthält .Original:exactly onereturn
statement that contains only literal values,constexpr
variables and functions.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
'constexpr Konstruktor' muss folgenden Anforderungen genügen:
Original:
constexpr constructor must satisfy the following requirements:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
- jeder seiner Parameter müssen wörtliche Typ seinOriginal:each of its parameters must be literal typeThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - Die Klasse muss keine virtuellen BasisklassenOriginal:the class must have no virtual base classesThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - der Konstruktor Körper muss entweder gelöscht oder ausgefallen oder enthalten nur die folgenden:Original:the constructor body must be either deleted or defaulted or contain only the following:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- null AussagenOriginal:null statementsThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - static_assert ErklärungenOriginal:static_assert declarationsThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. typedef
Erklärungen und Alias Erklärungen, die nicht definieren Klassen oder AufzählungenOriginal:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.- mit ErklärungenOriginal:using declarationsThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - using-DirektivenOriginal:using directivesThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- Der Konstruktor muss keine Funktion-try-BlockOriginal:the constructor must not have a function-try blockThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - jede Basisklasse und jeder Nicht-statisches Element muss initialisiert werden, entweder in der
initializer_list
oder durch Klammer-oder-gleich-Initialisierung. Ende jeder Bauherr beteiligt sind, müssen eine constexpr Konstruktor und jede Klausel jeder Klammer-oder-gleich initializer sein muss ein konstanter Ausdruck seinOriginal:every base class and every non-static member must be initialized, either in theinitializer_list
or by brace-or-equal initializer. End every constructor involved must be a constexpr constructor and every clause of every brace-or-equal initializer must be a constant expressionThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - jede implizite Konvertierung einbezogen muss ein konstanter Ausdruck seinOriginal:every implicit conversion involved must be a constant expressionThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
[Bearbeiten]Keywords
[Bearbeiten]Beispiel
Definition eines constexpr Funktion, die Fakultäten und eine buchstäbliche Art, die Zeichenfolgenliterale erstreckt berechnet
Original:
Definition of a constexpr function which computes factorials and a literal type that extends string literals
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream>#include <stdexcept> // constexpr functions use recursion rather than iterationconstexprint factorial(int n){return n <=1?1:(n * factorial(n-1));} // literal classclass conststr {constchar* p;std::size_t sz;public:template<std::size_t N>constexpr conststr(constchar(&a)[N]): p(a), sz(N-1){}// constexpr functions signal errors by throwing exceptions from operator ?:constexprchar operator[](std::size_t n){return n < sz ? p[n]:throwstd::out_of_range("");}constexprstd::size_t size(){return sz;}};constexprstd::size_t countlower(conststr s, std::size_t n =0, std::size_t c =0){return n == s.size()? c : s[n]>='a'&& s[n]<='z'? countlower(s, n+1, c+1): countlower(s, n+1, c);} // output function that requires a compile-time constant, for testingtemplate<int n>struct constN { constN(){std::cout<< n <<'\n';}}; int main(){std::cout<<"4! = "; constN<factorial(4)> out1;// computed at compile time volatileint k =8;std::cout<< k <<"! = "<< factorial(k)<<'\n';// computed at run time std::cout<<"Number of lowercase letters in \"Hello, world!\" is "; constN<countlower("Hello, world!")> out2;// implicitly converted to conststr}
Output:
4! = 24 8! = 40320 Number of lowercase letters in "Hello, world!" is 9