◐ Shell
clean mode source ↗

constexpr specifier (seit C++11) – cppreference.com

Aus cppreference.com

<metanoindex/>

  • 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 time

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

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.

'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.

  • 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 of constexpr 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.

  • es darf nicht virtuell

    Original:

    it must not be virtual

    The 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 sein

    Original:

    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 sein

    Original:

    each of its parameters must be literal type

    The 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 Aussagen

    Original:

    null statements

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

  • static_assert Erklärungen

    Original:

    static_assert declarations

    The 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ählungen

    Original:

    typedef declarations and Alias declarations that do not define classes or enumerations

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

  • mit Erklärungen

    Original:

    using declarations

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

  • using-Direktiven

    Original:

    using directives

    The 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 one return 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.

  • jeder seiner Parameter müssen wörtliche Typ sein

    Original:

    each of its parameters must be literal type

    The 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 Basisklassen

    Original:

    the class must have no virtual base classes

    The 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 Aussagen

    Original:

    null statements

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

  • static_assert Erklärungen

    Original:

    static_assert declarations

    The 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ählungen

    Original:

    typedef declarations and Alias declarations that do not define classes or enumerations

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

  • mit Erklärungen

    Original:

    using declarations

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

  • using-Direktiven

    Original:

    using directives

    The 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-Block

    Original:

    the constructor must not have a function-try block

    The 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 sein

    Original:

    every base class and every non-static member must be initialized, either in the initializer_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 expression

    The 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 sein

    Original:

    every implicit conversion involved must be a constant expression

    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

Keywords

constexpr

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.

#include <iostream>
#include <stdexcept>

// constexpr functions use recursion rather than iteration
constexpr int factorial(int n)
{
    return n <= 1 ? 1 : (n * factorial(n-1));
}

// literal class
class conststr {
    const char * p;
    std::size_t sz;
 public:
    template<std::size_t N>
    constexpr conststr(const char(&a)[N]) : p(a), sz(N-1) {}
    // constexpr functions signal errors by throwing exceptions from operator ?:
    constexpr char operator[](std::size_t n) {
        return n < sz ? p[n] : throw std::out_of_range("");
    }
    constexpr std::size_t size() { return sz; }
};
constexpr std::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 testing
template<int n> struct constN {
    constN() { std::cout << n << '\n'; }
};

int main()
{
    std::cout << "4! = " ;
    constN<factorial(4)> out1; // computed at compile time

    volatile int 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