statische const vs consxpr Mitgliederfelder in C ++ 11/14?

8

Was ist der Unterschied zwischen diesen Membervariablen:

%Vor%

Wenn mein Verständnis stimmt, kann ich sowohl i als auch j als Kompilierzeitkonstanten verwenden. Das heißt, sowohl std::array<int, my_class::i> als auch std::array<int,my_class::j> sollten funktionieren.

    
amin 29.03.2016, 10:48
quelle

1 Antwort

7

Es gibt keinen Unterschied für Member des Integral- oder Enumerationstyps (wie in Ihrem Beispiel). Für alle anderen Typen benötigen konstante Ausdrücke constexpr :

  

eine lvalue-to-rvalue-Konvertierung (4.1), sofern sie nicht auf

angewendet wird      
  • ein nichtflüchtiger glvalue des Integral- oder Enumerationstyps, der sich auf ein vollständiges nichtflüchtiges const-Objekt mit einem vorhergehenden bezieht   Initialisierung, initialisiert mit einem konstanten Ausdruck oder [...]
  •   
  • ein nichtflüchtiger glvalue, der sich auf ein nicht-flüchtiges Objekt bezieht, das mit constexpr definiert ist, oder das sich auf ein nicht veränderbares Unterobjekt eines solchen Objekts bezieht   ein Objekt oder [...]
  •   
    
Columbo 29.03.2016, 10:59
quelle

Tags und Links