Heim >Backend-Entwicklung >C++ >Können Consteval-Funktionen die Abhängigkeit von Vorlagenparametern von Funktionsargumenten in C 20 ermöglichen?
Consteval-Funktionen und Abhängigkeit von Vorlagenparametern von Funktionsargumenten
In C 17 wird eine Funktion verwendet, die eine Konstante direkt innerhalb einer Vorlagenparameterdeklaration zurückgibt ist aufgrund von Einschränkungen bei der Laufzeitausführung verboten. Mit der Einführung von Consteval-Funktionen in C 20 werden diese Einschränkungen voraussichtlich beseitigt. Wird dadurch jedoch eine erfolgreiche Kompilierung des folgenden Codes ermöglicht?
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
Nein.
Trotz der Anforderung der Consteval-Funktion an die Kompilierungszeitauswertung gilt nur die Funktionsdefinition selbst wird einmal eingegeben. Daher werden Funktionsparameter aufgrund der Möglichkeit von Typisierungsdiskrepanzen niemals als zentrale konstante Ausdrücke behandelt.
Diese Einschränkung wird im C 20-Vorschlag weiter betont, der in seinem Beispiel Parameter ausdrücklich von der Betrachtung als konstante Ausdrücke ausschließt :
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, } // but that's okay.</code>
Daher erlauben Konstruktionsfunktionen nicht, dass Vorlagenparameter von Funktionsargumenten abhängen, da den Parametern die notwendigen Typisierungsgarantien als konstante Ausdrücke fehlen.
Das obige ist der detaillierte Inhalt vonKönnen Consteval-Funktionen die Abhängigkeit von Vorlagenparametern von Funktionsargumenten in C 20 ermöglichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!