मैं संदर्भों का उपयोग करता हूं। यह कार्यान्वयनकर्ता को क्लाइंट को भारी कर लगाने के बिना पसंद को बनाने और अमूर्त करने की अनुमति देता है (कुछ मामलों में मामला, कुछ नहीं होगा)।
मैं उन्हें लगातार शैली के लिए भी उपयोग करता हूं - मुझे उनके कार्यान्वयन के विवरण द्वारा पारित सार्वजनिक इंटरफेस देखना पसंद नहीं है।
ट्रांजिस्टर और प्रतियां महंगी हो सकती हैं - यह आपके द्वारा गुजरने वाले प्रकार से काफी भिन्न होती है। मूल्य से वापस आने के लिए इंगित करता है कि प्रकार को छोटे पैमाने पर रचनात्मक, स्वीकार्य, प्रतिलिपि योग्य, चलाना चाहिए। कंपाइलर इस क्षेत्र (आरवीओ/चाल) में कुछ बेहतरीन अनुकूलन कर सकता है, लेकिन आप अपने कार्यान्वयन में महंगी परिचालन को कम करने के लिए सूचित निर्णय भी ले सकते हैं। एक बार जब आप अब प्रकारों का उपयोग नहीं कर रहे हैं, तो सभी प्रतिलिपि विशेषताओं को जानते हैं, फिर वापस लौटने का तरीका चुनना बहुत जटिल हो जाता है, इसलिए मैं इसे सरल और संदर्भों का समर्थन करता हूं।
किसी संदर्भ को पास करने से कुछ अन्य लाभ होते हैं, जैसे क्लाइंट पास किए गए प्रकार के उप-वर्ग का उपयोग करना पसंद करता है।
यदि आपको एक अनुकूलित प्रोग्राम की आवश्यकता है तो एक और लाभ: मैं अक्सर कॉपी सीटीओआर और operator=
हटा दूंगा यदि वे छोटे या संभव नहीं हैं। उत्परिवर्तनीय संदर्भ द्वारा उत्तीर्ण करने से आप उन प्रकारों के साथ काम कर सकते हैं जो कॉपी/असाइन करने योग्य नहीं हैं।
std::string
की सख्त गुंजाइश इस सवाल में प्रयोग किया जाता में: लौटने एक std::string
मूल्य से काफी आम है, और कई अनुकूलन इस मामले के लिए विशेष रूप बनाया गया है - RVO, गाय, और चाल कुछ उल्लेखनीय हैं। चूंकि नीचे उल्लिखित टिप्पणियों में उल्लू ने उल्लेख किया है, मूल्य से लौटने के लिए अक्सर पढ़ने में आसान होता है। std::string
और उच्च स्तर के कार्यक्रमों के मामले में, मूल्य से लौटने की कोई समस्या नहीं होने की संभावना है, लेकिन मानक लाइब्रेरी कार्यान्वयन के लिए शामिल लागतों को समझने के लिए मापना महत्वपूर्ण है यदि प्रदर्शन महत्वपूर्ण है (जो आपका प्रश्न सुझाता है मामला हो सकता है)।
एक महत्वपूर्ण विचार है कि यदि आप एक मौजूदा कार्यक्रम को बेहतर बनाने की कोशिश कर रहे, सुनिश्चित करें कि आप समझ कैसे कार्यान्वयन कार्यान्वित करता है, और जानें कि कैसे आप प्रकार सबसे अधिक प्रभावी ढंग से इस्तेमाल कर सकते हैं जब प्रदर्शन महत्वपूर्ण है है। कार्यान्वयन वास्तविक उपयोग के लिए अनुकूलित और अनुकूलित किया जा सकता है, जिसका अर्थ यह है कि वे निराशावादी हो सकते हैं और कुछ मामलों में आपको अनुमान लगाया जा सकता है, और प्रदर्शन में सुधार करने के आपके प्रयासों को पहले ही लागू किया जा सकता है या प्रदर्शन को अपनाने के लिए अपरंपरागत उपयोग हो सकता है। std::vector
का विशिष्ट आकार बदलने का व्यवहार एक स्पष्ट उदाहरण है। उच्च प्रदर्शन सड़क लेना आपको सर्वोत्तम परिणामों को प्राप्त करने के लिए जो कुछ जानने की आवश्यकता है, उसके बारे में बहुत समय और जटिलता जोड़ता है, और यह स्पष्ट रूप से आपके द्वारा उपयोग किए जाने वाले कार्यान्वयन और आपके द्वारा उपयोग किए जा रहे प्रकारों के अनुसार भिन्न होता है। यदि प्रदर्शन महत्वपूर्ण और मूल्यवान समय के निवेश के लिए है, तो आपके द्वारा उपयोग किए जाने वाले प्रकारों के संचालन को सीखना एक सार्थक प्रयास है जो महत्वपूर्ण लाभ प्राप्त कर सकता है।
मैं भी जोड़ना चाहिए कि मैं अक्सर निम्न स्तर में काम करते हैं - जहां प्रदर्शन के लिए महत्वपूर्ण है और/या संसाधन सीमित हैं। कोई अपवाद नहीं, कई ताले (कोई ढेर आवंटन का तात्पर्य नहीं है), न्यूनतम अमूर्त लागत, और गतिशील बहुरूपता के प्रतिबंधित उपयोग सहित कई प्रतिबंध भी हो सकते हैं। इसे सी ++ के लिए भी काफी मांग करने वाला डोमेन माना जा सकता है। मैं कोर निम्न स्तर टुकड़े के लिए संदर्भ चुनते हैं, लेकिन मुझे लगता है कि शासन को आराम होगा अगर मैं जानता हूँ कि एक कार्यक्रम केवल उच्च स्तर डोमेन या इकाई परीक्षण में इस्तेमाल किया जाएगा।
कोड प्रारूपित करने के लिए संपादक में '{} 'बटन का उपयोग करें। – Mat
क्या आप * उन "समय" के बारे में चिंतित हैं जिनके बारे में आप बात करते हैं? क्या आपने प्रोफाइलिंग और दृढ़ संकल्प किया है कि स्ट्रिंग निर्माण का समय आपके आवेदन की बाधा है? –