Czy istnieje sposób na uzyskanie innego zachowania funkcji constexpr
w fazie kompilacji iw czasie wykonywania?Określić wykonanie `constexpr` - podczas kompilacji lub w czasie wykonywania?
Rozważmy następujący przykład (przy użyciu funkcji teoretycznej z D: static if
):
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);
}
}
Jeśli nie, to czy jest jakiś sposób, aby ograniczyć constexpr
być tylko w czasie kompilacji?
Jeśli użyjesz go w [tekście, w którym wymagane jest stałe wyrażenie, to powinno być ocenione w czasie kompilacji] (http://stackoverflow.com/a/25891133/1708801) –
Możesz mieć szczęście z wewnętrznym GCC '__builtin_constant_p' ... – Deduplicator
@Deduplicator nie jest dobrze udokumentowaną funkcją, przynajmniej ostatnio wyglądałem, ale umieściłem na niej wszystko, co mogłem znaleźć w mojej [answer here] (http://stackoverflow.com/a/24400015/ 1708801). –