अगर मैं कार्य करें:const_cast <> का उपयोग करते समय अपरिभाषित व्यवहार कहां है?
const char* const_str = "Some string";
char* str = const_cast<char*>(const_str); // (1)
str[0] = "P"; // (2)
कहाँ (जो लाइन) वास्तव में अपरिभाषित व्यवहार है?
मैं इस पर बहुत कुछ खोज रहा हूं लेकिन मुझे कोई स्पष्ट और सटीक उत्तर नहीं मिला है (या कम से कम, कोई भी जिसे मैं समझ सकता हूं)।
भी संबंधित हैं:
// The documentation states that str will never be modified, just read.
void read_string(char* str);
यह ठीक है की तरह कुछ लिखने के लिए:
std::string str = "My string";
read_string(const_cast<char*>(str.c_str()));
जब से मैं निश्चित रूप से पता है कि read_string()
होगा अगर मैं एक बाहरी पुस्तकालय जो समारोह के इस प्रकार प्रदान करता है का उपयोग करें कभीstr
पर लिखने का प्रयास करें?
धन्यवाद।
"ऐसा करें, लेकिन अपनी नाक पकड़ो।" एक बार रैपर फ़ंक्शन में इसे करने पर विचार करें, इसलिए सभी वितरित कॉल साइट कम से कम उस कुरूपता से बच सकते हैं। –
आपके उत्तर के लिए बहुत बहुत धन्यवाद। क्या आपके पास अपने अंतिम दावे को मजबूत करने के लिए कोई स्रोत है? मैं ओपनएसएसएल के आसपास एक सी ++ रैपर डिजाइन कर रहा हूं (जो दुर्भाग्य से गंभीर इंटरफ़ेस असंगतताओं से ग्रस्त है) और मैं यह सुनिश्चित करना चाहता हूं कि मेरा कोड अपरिभाषित व्यवहार का कारण नहीं होगा। – ereOn
सी ++ मानक धारा 5.2.11 # 7 इंगित करता है कि एक * लेखन ऑपरेशन * अपरिभाषित व्यवहार में परिणाम। इस प्रकार ऑपरेशन को सुरक्षित रखना चाहिए। –