2011-03-13 15 views
10

मैं Boost.Interprocess के साथ एक प्रयोग के हिस्से के रूप में एक फ़ंक्शन लिख रहा हूं। फ़ंक्शन में मैं constexpr char* घोषित एक चर के लिए एक स्ट्रिंग अक्षर निर्दिष्ट करता हूं। जब मैं ऐसा करता हूं, तो मुझे मिलता है:constexpr और बहिष्कृत रूपांतरण चेतावनी

warning: deprecated conversion from string constant to char* [-Wwrite-strings]

constexpr की मेरी समझ यह है कि एक परिवर्तनीय घोषणा में यह वैरिएबल घोषित किया गया था कि चर को const घोषित किया गया था, लेकिन अतिरिक्त शर्त के साथ कि चर प्रारंभ किया जाना चाहिए, और प्रारंभिक निरंतर अभिव्यक्ति के साथ होना चाहिए।

इस समझ के साथ मैं const char* के रूप में व्यवहार करने की अपेक्षा करता हूं, और इसलिए चेतावनी जारी नहीं करता है। क्या मुझे कुछ याद आ रहा है कि constexpr कैसे काम करता है?

मैं -std = C++ 0x का उपयोग कर जीसीसी 4.6.0 20110306 के साथ संकलित कर रहा हूं।

जारी किए जाने वाले चेतावनी के लिए किसी भी तर्क की सराहना की जाएगी। धन्यवाद!

उत्तर

10

से const आपके चर char* const बना देगा।

आपको अभी भी समस्या है कि स्ट्रिंग अक्षर const char है और यह पता char* पर परिवर्तित करने की अनुमति है, लेकिन बहिष्कृत है।

+1

धन्यवाद। मैंने पॉइंटर्स के अन्य 'कॉन्स्ट' को नजरअंदाज कर दिया। मैंने घोषणा को 'कॉन्स्टेक्स कॉन्स चार *' में बदल दिया और चेतावनी गायब हो गई। धन्यवाद! – mmoran

6

इस के लिए एक समाधान के लिए:

इसके बजाय

के-
constexpr char* foo = "bar"; 

आप do- कर सकते हैं

constexpr char foo[] = "bar"; 

यह भी चेतावनी से छुटकारा मिल जाएगा।

संबंधित मुद्दे