Der bereitgestellte Code zeigt einen Versuch dazu Verwenden Sie den Rückgabewert einer constexpr-Funktion make_const in einem konstanten Ausdruck, stößt jedoch auf einen Fehler.
static constexpr int make_const(const int i) { return i; } void t1(const int i) { constexpr int ii = make_const(i); // Error occurs here (i is not a constant expression) std::cout << ii; } int main() { t1(12); // Call the function }
Eine constexpr-Funktion führt entgegen der landläufigen Meinung nicht dazu, dass ihre Parameter zur Kompilierungszeit auf magische Weise ausgewertet werden. Stattdessen ermöglicht es die Weitergabe der Konstituenz von seinen Eingabeargumenten an seine Ausgabe. Im angegebenen Code ist der Funktionsparameter i jedoch kein constexpr, sodass die constexpr-Funktion make_const ihn nicht in einen solchen umwandeln kann.
Der Fehler entsteht, weil die nachfolgende Zuweisung constexpr int ii = make_const(i) versucht, dies zu tun Deklarieren Sie eine constexpr-Variable (ii), die mit dem Ergebnis eines Nicht-constexpr-Ausdrucks (make_const(i)) initialisiert wird. Dies ist nicht zulässig, da constexpr-Variablen immer mit constexpr-Ausdrücken initialisiert werden müssen.
Eine constexpr-Funktion weist zwei Hauptmerkmale auf:
Um den Fehler zu beheben, kann man sicherstellen, dass der Funktionsparameter selbst vorhanden ist constexpr. Dies kann erreicht werden, indem die Funktionsdeklaration wie folgt geändert wird:
constexpr int make_const(constexpr int i) { return i; }
Diese Änderung garantiert, dass die Funktion ihre constexpr-Eingaben effektiv in constexpr-Ausgaben umwandeln kann, wodurch die beabsichtigte Verwendung der Funktion innerhalb eines konstanten Ausdrucks ermöglicht wird.
In den bereitgestellten alternativen Codebeispielen kann die Funktion make_const als constexpr-Ausdruck in t1 aufgerufen werden, da ihre Parameter jetzt constexpr sind. Der Versuch, das Ergebnis eines Nicht-Constexpr-Ausdrucks (z. B. einer Laufzeitvariablen) an die Funktion zu übergeben, führt jedoch immer noch zu einem Fehler, da die Funktion für ihre Constexpr-Ausführung Constexpr-Argumente benötigt.
Das obige ist der detaillierte Inhalt vonWarum kann ich einen Funktionsparameter einer „constexpr'-Funktion nicht in einem konstanten Ausdruck verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!