c++ - Why operator[] not allowed for maps but are allowed for int arrays? -
मेरे पास निम्न निजी सदस्यों के साथ एक वर्ग है:
निजी: int * vals_; आकार_प्रकार * cidx_; std :: नक्शा & LT; आकार_प्रकार, std :: जोड़ी & lt; आकार_टी, अहस्ताक्षरित int & gt; & Gt; ridx_; अब मैं ऑपरेटर में इन वेरिएबल्स तक पहुंचने का प्रयास कर रहा हूं & lt; & lt; अधिभार: (ध्यान दें कि m const ) std :: ostream & amp; ऑपरेटर & lt; & lt; (std :: ostream & amp; os, const smatrix & amp; amp; एम) {os & lt; & lt; M.cidx_ [0] & lt; & lt; endl; ओएस & lt; & lt; M.ridx_ [0]। पहले & lt; & lt; endl; वापसी ओएस; } मुझे क्या मिला है m.cidx_ [0] काम करेगा, लेकिन एम.रिड_ [0]। पहले एक त्रुटि देता है:
त्रुटि: पासिंग 'const std :: map, std :: less, std :: allocator & gt; & Gt; & Gt; ' के रूप में 'इस' के तर्क '_Tp & amp; Std :: map & lt; _Key, _Tp, _Compare, _Alloc & gt; :: ऑपरेटर [] (const _Key & amp;) [_Key = अहस्ताक्षरित int के साथ, _Tp = std :: pair, _Compare = std :: less, _Alloc = std :: allocator & gt; & Quot;] क्वालिफायर डिस्क्लेयर
मेरा मानना है कि ऑपरेटर [] एक संशोधित ऑपरेटर है और इसलिए इस तथ्य के विपरीत है कि मी const है लेकिन यह vals_ और cidx_ के लिए काम क्यों करता है जो कि int और size_type arrays हैं?
std: : नक्शा :: ऑपरेटर [] एक तत्व सम्मिलित करता है यदि वह मौजूद नहीं है, तो यह const वस्तुओं के साथ प्रयोग नहीं किया जा सकता है एआरएम्स, सी ++ में क्लास प्रकार नहीं हैं, उनके लिए a [idx] * (a + idx) के समतुल्य है और कभी भी ऐरे को अपने आप में बदल नहीं सकता। < / div>
Comments
Post a Comment