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
Linda HamiltonOriginal
2024-11-28 12:07:10873Durchsuche

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);

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{};
  1. Verwenden dieser Vorlage innerhalb der else-Klausel von die if/else-Anweisung:
else {       
    static_assert(always_false<T>);
}

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!

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