In questo esempio particolare le variabili locali sarebbe meglio dichiarata constexpr
, non const
, perché possono essere calcolati in fase di compilazione:
constexpr int g() { return 30; }
constexpr int f()
{
constexpr int x = g();
constexpr int y = 10;
return x + y;
}
Quando f()
viene chiamato in fase di esecuzione, senza la constexpr
su x
e , (con o senza const
su x
e) si sta dando al compilatore l'opzione per inizializzare x
e y
in fase di esecuzione anziché in fase di compilazione.Con il constexpr
su x
e y
, il compilatore deve calcolare x
e y
al momento della compilazione, anche quando f()
viene eseguito in fase di esecuzione.
In una diversa funzione, tuttavia, constexpr
non può essere sempre utilizzato. Per esempio se f()
e g()
preso un parametro:
constexpr int g(int z) { return z+30; }
constexpr int f(int z)
{
const int x = g(z);
constexpr int y = 10;
return x + y;
}
Ora x
non possono essere contrassegnati constexpr
perché z
non può essere una fase di compilazione costante, e non v'è attualmente alcun modo per marcare come tale. Quindi in questo caso, contrassegnare x
const
è il meglio che puoi fare.
fonte
2015-11-01 16:22:45
Non sono d'accordo con la vostra premessa che l'omissione di 'const' rende una funzione" più pulita ". Inoltre, no, non la penso così. Ma non sono "constexpr't. –
Puoi persino [cambiarle] (http://ideone.com/L4Oa68)! (E la sua logica, non rende la funzione _not pure_) – Lol4t0
@LeoHeinsaar Penso che tu intenda meno caratteri non bianchi, perché altrimenti può essere banalmente reso "più pulito" da quella definizione in un modo che sarà quasi universalmente interpretabile come illeggibile . – hvd