const vs constexpr für Variablen in C++: Was ist der Unterschied und was wählen?
Hallo zusammen! Ich lerne C++11/14 und bin verwirrt über den Unterschied zwischen `const` und `constexpr` bei der Deklaration von Variablen. Ich verstehe, dass beide Schlüsselwörter eine Variable unveränderlich machen, aber überall steht, dass sie nicht dasselbe sind.
Hier ist ein Beispiel, das mich verwirrt:
```cpp
const int x = 42; // Variante 1
constexpr int y = 42; // Variante 2
const int z = foo(); // Funktioniert
constexpr int w = foo(); // Compiler-Fehler, wenn foo() nicht constexpr ist
```
Ich habe gelesen, dass `constexpr` die Berechnung zur Compile-Zeit garantiert, `const` jedoch nicht. Aber wozu braucht man dann `const`, wenn `constexpr` strenger ist? Und warum sehe ich in realen Projekten überall die Verwendung von `const` für Variablen, die offensichtlich zur Compile-Zeit bekannt sind?
Noch eine Frage: Wenn ich `const int size = 10;` schreibe und dann `int arr[size];` deklariere – funktioniert das? Und wenn `size` über eine Funktion berechnet wird? Ich habe von VLA (variable-length arrays) gehört und dass dies eine nicht standardkonforme Erweiterung in C++ ist, aber ich verstehe nicht, wie das