2016-03-29 21 views
8

Qual è la differenza tra queste variabili membro:campi membri const const vs constexpr in C++ 11/14?

struct my_class { 
    static const int i = 0; 
    static constexpr int j = 0; 
}; 

Se la mia comprensione è corretta, sono in grado di utilizzare entrambe le i e j costanti di tempo come di compilazione. Cioè, entrambi std::array<int, my_class::i> e std::array<int,my_class::j> dovrebbero funzionare.

+5

Eventuali duplicati di [Differenza tra \ 'constexpr \' e \ '\ const'] (http://stackoverflow.com/questions/14116003/difference-between-constexpr-and-const –

+0

Dopo aver letto quella domanda, non riesco ancora a capire la risposta alla mia domanda :-) – amin

+0

@HumamHelfawi voglio sapere che differenza fa quando il constexpr è statico. è un po 'diverso. – amin

risposta

7

Non esiste alcuna differenza per i membri di tipo integrale o di enumerazione (come nell'esempio). Per tutti gli altri tipi, espressioni costanti require constexpr:

un Ivalue-to-rvalue conversione (4.1) a meno che non sia applicata a

  • un glvalue non volatile di tipo integrale o di enumerazione che fa riferimento ad un completare l'oggetto const non volatile con un'inizializzazione precedente, inizializzata con un'espressione costante o [...]
  • un glvalue non volatile che fa riferimento a un oggetto non volatile definito con constexpr o che fa riferimento a un oggetto non modificabile sotto-oggetto di tale un oggetto, o [...]