Sollte "constexpr" auch "noexcept" sein?

8

Wenn ich eine constexpr -Funktion definiere, sollte ich sie auch als noexcept deklarieren? Ich stelle mir vor, dass in dem Fall, in dem die Argumente und die Verwendung die Anforderungen für die Kompilierzeitauswertung erfüllen, die Bedeutung möglicher Ausnahmen strittig ist. Für Fälle, in denen die Funktion zur Laufzeit ausgewertet wird, gilt dies jedoch als normal.

Aus praktischen Erwägungen heraus, wenn die Funktion tatsächlich einfach ist, vielleicht mit eingebauter Arithmetik oder einem Cast, so dass der Compiler die Funktion immer inline einbinden und optimieren kann, Ist es für die Effizienz des generierten Codes wichtig, wenn ich noexcept weglasse?

    
JDługosz 29.02.2016, 09:32
quelle

1 Antwort

7

Nein, sollten Sie nicht.

"Kann nicht fehlschlagen" und "kann zur Kompilierzeit ausgewertet werden" sind orthogonale Probleme. Beispielsweise möchten Sie eine ganzzahlige Potenzfunktion schreiben, aber Sie möchten die Leistung als signiert verwenden (weil Sie glauben, dass vorzeichenlose Zahlen nur für sehr spezielle Fälle verwendet werden sollten). Jetzt sagen Sie, dass Sie eine Ausnahme auslösen möchten, wenn die Macht negativ ist. In C ++ 14 können Sie es so schreiben:

%Vor%

Diese Funktion ist eindeutig nicht execept, aber für nicht negative Argumente können Sie sie offensichtlich zur Kompilierzeit auswerten. Wenn Sie es für negative Argumente in einem Kontext versuchen, in dem Sie das Ergebnis zur Kompilierzeit benötigen, erhalten Sie einen Kompilierungsfehler, der in Ordnung sein sollte.

    
Sebastian Redl 29.02.2016 09:37
quelle

Tags und Links