जब मैं कुछ इस तरह करते हैं:लूप के लिए सी ++ 11 श्रेणी-आधारित कैसे सरणी आकार को जानता है?
int my_array[5] = {1, 2, 3, 4, 5};
for (int &x : my_array) {
x *= 2;
}
सी ++ 11 स्पष्ट रूप से जानता है कि मेरी सरणी केवल 5 तत्व है। क्या यह जानकारी my_array ऑब्जेक्ट में कहीं भी संग्रहीत है?
यदि हां, तो क्या कोई अच्छा कारण है कि यह डेवलपर के रूप में मेरे लिए उपलब्ध नहीं है (या यह है?!?!?)? ऐसा लगता है कि अगर सी ++ देव हमेशा उन सरणी की सीमाओं को जानते हैं जो वे काम कर रहे हैं तो दुनिया की कई समस्याओं का समाधान किया जाएगा।
ठीक है:
यहाँ एक उदाहरण आकार समारोह है। तो क्या कोई विशेष कारण है कि my_array.size मौजूद नहीं है? – MrFox
@ सुस्लिक: निश्चित रूप से, क्योंकि सरणी कक्षा प्रकार नहीं हैं और इस प्रकार सदस्य कार्य नहीं हो सकते हैं। लेकिन आप एक 'array_size' मुक्त फ़ंक्शन टेम्पलेट लिख सकते हैं जो वांछित मान उत्पन्न करता है, या आसानी से निर्मित ['std :: limit'] (http://en.cppreference.com/w/cpp/types/extent का उपयोग करें))। –
मैं अपने जीवन को इतनी देर तक इस बारे में नहीं जानता था ... मैं std :: vector blame :)। – MrFox