Heim >Backend-Entwicklung >C++ >Können Consteval-Funktionen die Abhängigkeit von Vorlagenparametern von Funktionsargumenten in C 20 ermöglichen?

Können Consteval-Funktionen die Abhängigkeit von Vorlagenparametern von Funktionsargumenten in C 20 ermöglichen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-23 16:43:02605Durchsuche

Can Consteval Functions Enable Template Parameter Dependence on Function Arguments in C  20?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn