क्या अपने स्वयं के पुनरावृत्तियों का उपयोग करके कंटेनर को असाइन करना सुरक्षित है?


10

उदहारण के लिए:

string s = "123";
s.assign(find(s.begin(),s.end(),'2'), s.end());

क्या उपरोक्त कोड के व्यवहार को परिभाषित किया गया है? या यह अपरिभाषित व्यवहार की ओर जाता है?

जवाबों:


5

हाँ। असाइन किए गए इस संस्करण को इस रूप में परिभाषित किया गया है

template<class InputIterator>
  constexpr basic_string& assign(InputIterator first, InputIterator last);

बाधाएं : InputIterator एक प्रकार है जो इनपुट पुनरावृत्ति के रूप में योग्य है।

प्रभाव : समतुल्य: रिटर्न असाइनमेंट (बेसिक_स्ट्रिंग (पहला, अंतिम, get_allocator ()));

जो परिवर्तन होने से पहले एक अस्थायी गणना दिखाता है।


"के बराबर" का मतलब यह नहीं है कि एक वास्तविक अस्थायी बनाया जाना है। शब्दार्थ एक ही होना चाहिए, यद्यपि। और दिखाया गया संस्करण स्व-असाइनमेंट के खिलाफ सुरक्षित है, वास्तविक कार्यान्वयन भी होना चाहिए।
MSALERS

@MSalters। माना। मैंने उस पर टिप्पणी करने का इरादा किया, फिर यह निर्धारित करने की कोशिश में खो गया कि आवंटन का कितना उपयोग किया जा सकता है।
एपीग्रामग्राम

ध्यान दें कि यह स्ट्रिंग्स के लिए विशिष्ट है। वैक्टर के लिए, यह यूबी होगा।
टीसी

@TC, क्या आप मानक उद्धृत कर सकते हैं?
एडलर

1
@ एडलर, इस तालिका को देखें जिसमें वेक्टर विवरण संदर्भित है।
एपीग्रामग्राम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.