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))
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:
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:
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!