मुझे यकीन है कि const vector<int *>
के सही अर्थ तो मैं एक विचार प्राप्त करने के लिए नीचे दिए गए कोड संकलित लेकिन अब अधिक उलझन में हूँ नहीं हूँ।इंट पॉइंटर्स के कॉन्स्ट वेक्टर में डीरेन्स्क्रिप्टेड तत्व क्यों परिवर्तनीय है?
vector<int *> v;
int x = 1, y = 2;
v.push_back(&x);
v.push_back(&y);
const vector<int *> w = v;
w[0] = &y; //failed. Element is a constant pointer?
*(w[0]) ++; //failed. Element pointer references to constant value?
अगर मैं यहाँ बंद कर दिया था, मैं मान लिया होता है कि const vector<int *>
const int * const
का एक वेक्टर है, लेकिन फिर मैं निम्नलिखित जो स्पष्ट रूप से है कि इस धारणा का खण्डन करने की कोशिश की।
*(w[0]) += 3; //passed. Value not constant?
*(w[0]) = 20; //passed. Why...
अब *(w[0])
कारण मेरे लिए अज्ञात के लिए स्पष्ट रूप से ++
और +=
और काम अलग ढंग से व्यवहार करता है। मैंने खुद को आश्वस्त किया कि const vector
केवल vector
वर्ग की निरंतर वस्तु घोषित करता है और उपरोक्त परिणाम vector
कक्षा के ऑपरेटर ओवरलोडिंग के वास्तविक कार्यान्वयन पर निर्भर हो सकते हैं। लेकिन मैं इसके चारों ओर अपने सिर लपेट नहीं सकता। क्या कोई समझाने में मदद कर सकता है, कृपया?
यदि यह प्रासंगिक है, तो मैक पर g ++ 4.2 का उपयोग करता हूं।
आपको यह दिलचस्प मिल सकता है: पोस्ट को पूर्व-वृद्धि में बदलें और देखें कि दूसरी विफलता उदाहरण पर क्या होता है। '++ * (डब्ल्यू [0]);'। – WhozCraig
मुझे लगता है कि भ्रम का एक बड़ा स्रोत '* (डब्ल्यू [0]) ++;' '(* w [0]) ++ के बजाय लिख रहा है, '(जो मुझे लगता है कि इच्छित परिणाम संभवतः था)। ऑपरेटर प्राथमिकता कभी-कभी थोड़ा मुश्किल हो सकती है। – Kat