I miei due centesimi, mentre guardo alcuni documenti come that one.
In realtà, potrebbe essere valido.
In effetti, la differenza tra constexpr
e const
si basa principalmente sui loro scopi, ma il primo implica un secondo effetto collaterale.
C'è anche una differenza più sottile: constexpr
è un specificatore, mentre const
è un qualificatore di tipo.
In particolare: funzione primaria
di const è di esprimere l'idea che un oggetto non viene modificato tramite un'interfaccia
Sull'altro lato: funzione primaria
di constexpr è estendere il range di ciò che può essere calcolato in fase di compilazione, rendendo tale tipo di calcolo sicuro e utilizzabile anche in contesti di compilazione
O anche più concisa da here:
constexpr - specifica che il valore di una variabile o una funzione può apparire in espressioni costanti
Comunque accade che:
constexpr di fronte a una definizione di variabile [...] implica const
Quindi, anche se la ragione per cui si dovrebbe usare constexpr
anziché const
è chiara, e ognuno tende a ricordare che:
constexpr non sostituisce generale scopo per const (o viceversa)
E 'un dato di fatto che l'utilizzo di constexpr
in realtà si sta dicendo che questo membro è implicitamente const
(anche di avere un insieme di vincoli più specifici su come quel membro può essere definito).
In ogni caso, una volta definito, il membro non è altro che un membro di dati con il qualificatore di tipo const
(che può essere utilizzato in espressioni costanti), ovvero ciò che si dichiara fuori dalla classe.