C++ में constexpr और const के बीच क्या अंतर है?
सभी को नमस्कार! मैंने C++11 सीखना शुरू किया है और एक नए कीवर्ड `constexpr` पर ध्यान गया। पहले मैं हमेशा `const` का उपयोग अपरिवर्तनीय वेरिएबल घोषित करने के लिए करता था। लेकिन अब `constexpr` भी आ गया है, और मैं पूरी तरह से समझ नहीं पा रहा हूँ कि कब क्या उपयोग करना चाहिए।
उदाहरण के लिए, मैं ऐसा कोड लिखता हूँ:
```cpp
const int size = 5;
int arr[size]; // यह काम करता है
```
लेकिन अगर मैं लिखूँ:
```cpp
int get_size() { return 5; }
const int size = get_size();
int arr[size]; // पुराने मानकों में कंपाइलेशन एरर!
```
मैं समझता हूँ कि `const` केवल इनिशियलाइज़ेशन के बाद वेरिएबल को बदलने से रोकता है, लेकिन यह गारंटी नहीं देता कि मान कंपाइल-टाइम पर ज्ञात है। वहीं, मैं `constexpr` के उदाहरण देखता हूँ:
```cpp
constexpr int square(int x) { return x * x; }
constexpr int val = square(5); // ठीक है, कंपाइल-टाइम पर गणना होती है
```
प्रश्न:
1. वेरिएबल के लिए `const` और `constexpr` में मूलभूत अंतर क्या है?
2. फंक्शन के लिए `constexpr` का उपयोग कब करना चाहिए?
3. क्या `constexpr` हर जगह `const` को बदल सकता है?
कृपया समझाएँ।