मुझे कॉन्स और कॉन्टेक्सप्र के बीच का अंतर पता है। एक संकलन समय स्थिर है और दूसरा संकलन समय या रनटाइम निरंतर है।कॉन्स कॉन्सएक्सप्रैर चार * बनाम कॉन्सएक्सप्रैर चार *
हालांकि, वर्ण/तारों की सरणी के लिए, मैं उलझन में हूं कि संकलक दूसरे पर इस्तेमाल होने के बारे में शिकायत क्यों करता है।
उदाहरण के लिए मेरे पास है:
constexpr char* A[2] = {"....", "....."};
const constexpr char* B[2] = {"....", "....."};
घोषणा के साथ
'ए' मैं:
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
लेकिन घोषणा "बी" के साथ मुझे कोई चेतावनी मिलता है।
अतिरिक्त कॉन्स क्वालीफायर चेतावनी से कैसे छुटकारा पाता है? क्या वे दोनों "कॉन्स char *" वैसे भी नहीं हैं? मैं पूछता हूं क्योंकि दोनों को constexpr
के साथ घोषित किया गया है जो इसे डिफ़ॉल्ट रूप से const char*
बनाना चाहिए?
मैं एक अच्छा होने की उम्मीद थी: एस
'constexpr' सूचक पर लागू होता है, जिससे इसे 'const' बना दिया जाता है, लेकिन वह ऑब्जेक्ट नहीं जो यह इंगित करता है। तो यह उन कुछ मामलों में से एक है जहां आपको 'const' और' constexpr' को गठबंधन करने की आवश्यकता हो सकती है। – 0x499602D2
'constexpr char *' एक 'char * const' है। 'Constexpr' विनिर्देशक वस्तु के पूरे प्रकार पर लागू होता है - यह है, यह घोषणा पर लागू होता है-, 'const' एक योग्यता (एक प्रकार का) है। – dyp