Heim > Backend-Entwicklung > C++ > Wie garantiere ich die exklusive Ausführung von Consexpr if/else-Zweigen in C?

Wie garantiere ich die exklusive Ausführung von Consexpr if/else-Zweigen in C?

Linda Hamilton
Freigeben: 2024-11-28 12:07:10
Original
800 Leute haben es durchsucht

How to Guarantee Exclusive Execution of Constexpr if/else Branches in C  ?

Sicherstellung der exklusiven Ausführung von Consexpr if/else-Zweigen

In C ist es beim Erstellen einer Reihe von constexpr if/else-Anweisungen wünschenswert, dies zu tun Stellen Sie sicher, dass der else-Zweig niemals ausgeführt wird. Dies geschieht normalerweise durch Wiederholen der Auswertung aller Bedingungen in der else-Klausel, wie in:

static_assert(condition1 || condition2 || condition3);
Nach dem Login kopieren

Eine solche Wiederholung kann jedoch mühsam werden, insbesondere bei komplexen Bedingungen.

Einsatz abhängiger Anweisungen

Eine elegantere Lösung besteht darin, die verworfene Anweisung von den Vorlagenparametern abhängig zu machen. Dies wird erreicht durch:

  1. Definieren einer constexpr std::false_type-Vorlage, die immer false zurückgibt:
template <class...> constexpr std::false_type always_false{};
Nach dem Login kopieren
  1. Verwenden dieser Vorlage innerhalb der else-Klausel von die if/else-Anweisung:
else {       
    static_assert(always_false<T>);
}
Nach dem Login kopieren

Dieser Ansatz ist gültig weil:

  • Gemäß [temp.res]/8 des C-Standards ist das Programm fehlerhaft, wenn keine gültige Spezialisierung für die constexpr if/else-Anweisung innerhalb einer Vorlage generiert werden kann.
  • Da die Always_false-Vorlage immer false zurückgibt, kann unter keiner Spezialisierung für die else-Klausel generiert werden Umstände.
  • Daher wird die else-Klausel niemals zur Kompilierungszeit ausgeführt.

Das obige ist der detaillierte Inhalt vonWie garantiere ich die exklusive Ausführung von Consexpr if/else-Zweigen in C?. 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