constexpr-Fehler zur Kompilierungszeit, aber kein Overhead zur Laufzeit
Es gibt einen bekannten Trick, um bei der Auswertung von a einen Fehler beim Kompilieren zu verursachenconstexpr
Funktionieren Sie folgendermaßen:
constexpr int f(int x) {
return (x != 0) ? x : throw std::logic_error("Oh no!");
}
Und wenn die Funktion in a verwendet wirdconstexpr
Kontext erhalten Sie einen Kompilierungsfehler, wennx == 0
. Wenn das Argument zuf
ist nichtconstexpr
In diesem Fall wird jedoch zur Laufzeit eine Ausnahme ausgelöst, wennx == 0
, was aus Performancegründen nicht immer erwünscht ist.
Ähnlich der Theorie vonassert
bewacht vonNDEBUG
Gibt es eine Möglichkeit, einen Fehler beim Kompilieren mit einem zu verursachen?constexpr
funktionieren, aber zur Laufzeit nichts tun?
Endlich entspanntconstexpr
Regeln in C ++ 1y (C ++ 14) ändern etwas?