मैं आमतौर पर std::vector
का उपयोग करता हूं और कॉन्स संदर्भ द्वारा पास करना चाहता हूं। उस ने कहा, अगर मेरे एपीआई को किसी बिंदु पर सी कोड द्वारा बुलाया जा सकता है, तो कॉन्स्ट पॉइंटर द्वारा पास का उपयोग करने से समझ हो सकती है, हालांकि आपको आकार को भी भेजना होगा। यदि फ़ंक्शन को std::array
या std::vector
के साथ बुलाया जा सकता है, तो आप एक पॉइंटर (और आकार), या इटरेटर्स (प्रारंभ/समाप्ति) सेट करने का निर्णय ले सकते हैं।
यदि हम std :: array का उपयोग करने के बारे में बात कर रहे हैं, तो टेम्पलेट तर्क को सरणी के आकार की आवश्यकता होती है। इसका मतलब यह होगा एक सामान्य समारोह में, आप एक निश्चित आकार आवश्यकता होगी:
void myfunc(const std::array<int, 5>& mydata){...}
हालांकि, अगर हम आकार पर एक टेम्प्लेटेड समारोह, templating करते हैं, कि अब कोई समस्या नहीं है।
template<unsigned int SZ>
void myfunc(const std::array<int, SZ>& mydata) {...}
हम ढेर आवंटित सी शैली सरणियों बारे में बात कर रहे हैं, तो ... अच्छा C++ शैली std :: सरणी/std :: सी शैली सरणियों के लिए वेक्टर पसंद करते है। मैं पेज 152 पर C++ Coding Standard by Herb Sutter अध्याय 77 पढ़ने की सलाह दूंगा। सी-स्टाइल सरणी का उपयोग करते समय, पॉइंटर और आकार को भेजना मानक तरीका है।
! संदर्भ के अनुसार पास करने के लिए गतिशील रूप से आवंटित सरणी को पैरामीटर के रूप में स्वीकार नहीं किया जाएगा? कैसे? एक संदर्भ सभी उपनाम के बाद है। – quantum231
@ quantum231 गतिशील रूप से एक सरणी आवंटित करने से पहले ही एक सूचक लौटाता है, इसलिए नहीं। –
कोई ऑटो-आवंटन आवश्यकता नहीं है, लेकिन एक प्रकार का मुद्दा है। उदाहरण: 'शून्य एफ (int (और तर्क) [5]);' 'शून्य जी() {एफ (* नया int [1] [5]);}' –