Gibt es eine Möglichkeit, ein unterschiedliches Verhalten einer constexpr
Funktion in der Kompilierungsphase und zur Laufzeit zu erreichen?"conetexpr" -Ausführung bestimmen - während der Kompilierung oder zur Laufzeit?
Betrachten Sie das folgende Beispiel (eine theoretische Funktion von D: static if
verwenden):
constexpr int pow(int base , int exp) noexcept
{
static if(std::evaluated_during_translation()) {
auto result = 1;
for(int i = 0 ; i < exp ; i++)
result *= base;
return result;
} else { // std::evaluated_during_runtime()
return std::pow(base , exp);
}
}
Wenn nicht, gibt es eine Möglichkeit, constexpr
beschränken sich nur auf sein kompilieren Zeit?
Wenn Sie es in einem [conext verwenden, wo ein konstanter Ausdruck erforderlich ist, sollte es zur Kompilierzeit ausgewertet werden] (http://stackoverflow.com/a/25891133/1708801) –
Sie könnten Glück mit GCC-intrinsic haben '__builtin_constant_p' ... – Deduplicator
@Deduplicator nicht eine sehr gut dokumentierte Funktion, zumindest das letzte Mal, als ich schaute, aber ich legte alles, was ich finden konnte darauf in meinem [Antwort hier] (http://stackoverflow.com/a/24400015/ 1708801). –