Avatar ·

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