Heim > Backend-Entwicklung > C++ > Können Consteval-Funktionen Vorlagenparameter zulassen, die auf Funktionsargumenten basieren?

Können Consteval-Funktionen Vorlagenparameter zulassen, die auf Funktionsargumenten basieren?

Mary-Kate Olsen
Freigeben: 2024-10-24 01:35:01
Original
475 Leute haben es durchsucht

Can Consteval Functions Allow Template Parameters Reliant on Function Arguments?

Können Consteval-Funktionen Vorlagenparameter aktivieren, die auf Funktionsargumenten basieren?

In C 17 sind constexpr-Funktionen wie das folgende Snippet ungültig:

<code class="cpp">constexpr int foo(int i) {
    return std::integral_constant<int, i>::value;
}</code>
Nach dem Login kopieren

Trotz der Auswertung von foo zur Kompilierungszeit erfordert der Compiler, dass es zur Laufzeit ausführbar ist, was die Instanziierung von Vorlagen behindert.

C 20 führt Consteval-Funktionen ein, die die Auswertung zur Kompilierzeit erzwingen. Man könnte sich fragen, ob dies Code wie den folgenden zulässt:

<code class="cpp">consteval int foo(int i) {
    return std::integral_constant<int, i>::value;
}</code>
Nach dem Login kopieren

Die Antwort ist Nein.

Die möglichen Änderungen des Papiers können die singuläre Typisierung von Nicht-Vorlagen nicht ändern Funktionsdefinitionen. Wenn dieser Code außerdem gültig wäre, würde er die Möglichkeit eröffnen, Variablen vom Typ std::integral_constant zu deklarieren, was im Hinblick auf die One Definition Rule (ODR) äußerst restriktiv erscheint.

Das Papier veranschaulicht auch anhand eines Beispiels, dass Parameter nicht als zentrale konstante Ausdrücke behandelt werden:

<code class="cpp">consteval int sqrsqr(int n) {
  return sqr(sqr(n)); // Not a constant-expression at this point, but that's okay.
}</code>
Nach dem Login kopieren

Im Wesentlichen wird Funktionsparametern aufgrund möglicher Typinkonsistenzen immer der Status eines konstanten Ausdrucks fehlen.

Das obige ist der detaillierte Inhalt vonKönnen Consteval-Funktionen Vorlagenparameter zulassen, die auf Funktionsargumenten basieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage