नहीं। यह कहना कि वे कर रहे हैं एक ही मतलब है कि कोई समय है कि स्थिरांक का उपयोग नहीं कर एक स्थिरांक संस्करण के लिए कार्यात्मक रूप से समान कोड के उत्पादन के बिना वैध होगा यह है कि।
मुझे सुरक्षित सिंगलेट्स के निर्माण में यह उपयोगी लगता है। मैंने इसे पूरी तरह से एक्सप्लोर नहीं किया है, और उम्मीद करेगा कि गैर-कॉन्स कॉन्टेक्सप्र के लिए अन्य वैध उपयोग हैं।
एक उदाहरण के रूप में, यहाँ कोड है कि गैर स्थिरांक constexpr की आवश्यकता है: एक चर के एक वैश्विक परिभाषा के साथ
प्रारंभ:
int global_int_;
और अब हम एक constexpr समारोह है कि रिटर्न बना सकते हैं यह करने के लिए एक संदर्भ:
0:
constexpr int& get_global()
{
return global_int_;
}
अब हम उस संदर्भ कहीं और उपयोग कर सकते हैं
int main()
{
constexpr int& i{ get_global() };
// do stuff with i
return 0;
}
अब हम गैर-कॉन्स int के रूप में i
का उपयोग कर सकते हैं। यदि कॉन्स का निहित किया गया था, तो यह संभव नहीं होगा।
चूंकि गैर-कॉन्स्टेक्सप्रैफ़ वैध है, यदि आप कॉन्स्टेक्स का उपयोग कर रहे हैं, तो आपको इसे स्पष्ट रूप से घोषित करने की आवश्यकता होगी।
स्रोत
2015-03-04 01:29:49
सच है, मुझे लगता है कि ओपी सही है, यह त्रुटि पर असर डालने के लिए _ought_ है। 'constexpr' और 'constexpr const' एक ही चीज़ होना चाहिए। –
समस्या एक चार * के लिए एक कॉन्स char * का रूपांतरण है। चाहे परिणामी मूल्य एक आधार है, या एक constexpr, एक कारक नहीं है। उस बिंदु से पहले से ही त्रुटि हुई है। एक ही त्रुटि केवल एक सादा char * foo = "bar" के साथ होगी। –
'foo' 'का प्रकार 'const const char [4]' है। –