Heim > Backend-Entwicklung > C++ > Kann C 11 feststellen, ob ein Ausdruck eine Konstante zur Kompilierungszeit ist?

Kann C 11 feststellen, ob ein Ausdruck eine Konstante zur Kompilierungszeit ist?

Patricia Arquette
Freigeben: 2024-12-05 06:04:11
Original
996 Leute haben es durchsucht

Can C  11 Determine if an Expression is a Compile-Time Constant?

Ist constexpr in C 11 möglich?

Frage:

Kann C 11 feststellen, ob Ein Ausdruck ist ein konstanter Ausdruck zur Kompilierungszeit (constexpr)?

Antwort:

Ja, es ist möglich, einen booleschen Wert zur Kompilierungszeit basierend auf dieser Bestimmung mit der folgenden Technik zu erzeugen:

template<typename T> 
constexpr typename remove_reference<T>::type makeprval(T &&& t) {
  return t;
}

#define isprvalconstexpr(e) noexcept(makeprval(e))
Nach dem Login kopieren

Dieses Makro prüft mithilfe des NoException-Operators, ob der Ausdruck e ein Wertkonstantenausdruck ist. Wenn noexclusive(makeprval(e)) true ergibt, ist der Ausdruck e ein Wertkonstantenausdruck.

Erklärung:

Für Wertkonstantenausdrücke gelten bestimmte Einschränkungen:

  • Funktionsaufrufe dürfen nicht auslösend sein Ausnahmespezifikationen.
  • Wurfausdrücke sind verboten.
  • Dynamische Umwandlungen und Typid-Ausdrücke müssen in einer nicht ausführbaren Form vorliegen.

Die Funktion makeprval ist nicht deklariert als noexclusive. Wenn also e ein konstanter Ausdruck vom Typ prvalue ist, ist der Aufruf von makeprval(e) ein konstanter Ausdruck. Daher gibt der Operator „noexclusive“ „true“ zurück.

Einschränkungen:

Das isprvalconstexpr-Makro weist einige Einschränkungen auf:

  • Es kann zu falsch-negativen Ergebnissen führen in Fällen, in denen der Ausdruck ein konstanter Ausdruck ist, die Unterausdrücke jedoch möglicherweise ausgewertet werden, jedoch nicht tatsächlich ausgewertet.
  • Es wird nur nach prvalue-Konstantenausdrücken gesucht, nicht nach allgemeinen constexpr-Ausdrücken.

Das obige ist der detaillierte Inhalt vonKann C 11 feststellen, ob ein Ausdruck eine Konstante zur Kompilierungszeit ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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