2010-01-21 23 views

उत्तर

15

आदिम प्रकार (int, char, float, ...) और पीओडी structs गुजरना पसंद करते हैं जो मूल्य के अनुसार प्रतिलिपि (प्वाइंट, जटिल) के लिए सस्ते हैं।

यह संदर्भ द्वारा पारित होने पर आवश्यक संकेत से अधिक कुशल होगा।

Boost's Call Traits देखें।

टेम्पलेट वर्ग call_traits<T> "सर्वश्रेष्ठ" विधि समाहित करने के लिए या एक समारोह से कुछ प्रकार टी के एक पैरामीटर पारित करने के लिए, और नीचे दी गई तालिका में के रूप में परिभाषित typedefs का एक संग्रह के होते हैं। call_traits का उद्देश्य यह सुनिश्चित करना है कि "संदर्भों के संदर्भ" जैसी समस्याएं कभी न हों, और यह पैरामीटर संभवतः सबसे प्रभावी तरीके से पारित किए जाते हैं।

4

हां, संदर्भ तर्क द्वारा पारित होने तक पहुंच के लिए मूल्य तर्क द्वारा पारित होने से अधिक संकेतों की आवश्यकता हो सकती है। इसके अलावा, तर्क का आकार एक सूचक के आकार से छोटा होने पर धीमा हो सकता है। बेशक, यह सब मानते हैं कि संकलक इसे अनुकूलित नहीं कर रहा है।

+0

तो कोई यह कैसे पता लगा सकता है कि उसका कंपाइलर इसे अनुकूलित कर रहा है या नहीं? – Arthur

+2

बाइनरी कोड –

7

आप प्रतिलिपि इलिजन और RVO (मूल्य अनुकूलन द्वारा वापसी) के बारे में इस लेख "Want speed ? Pass by value" पढ़ सकते हैं। यह बताता है कि संदर्भ कभी-कभी संकलक को ऐसा करने से रोकते हैं।

1

कंपाइलर केवल मूल्य से गुजरने के संदर्भ में एक आदिम प्रकार को पारित करने का अनुकूलन कर सकता है, यदि प्रकार एक समान आकार या संदर्भ/सूचक के आकार से छोटा है। इस बात की कोई गारंटी नहीं है कि कंपाइलर ऐसा करेगा, इसलिए यदि आपके पास कोई विकल्प है, तो मूल्य के आधार पर आदिम प्रकारों को पास करें। हालांकि, टेम्पलेट कोड में, आपको अक्सर संदर्भ द्वारा पास करना होगा - वेक्टर के push_back पर विचार करें जो एक कॉन्स्ट संदर्भ लेता है। यदि आपके पास स्याही का वेक्टर है, तो आप एक प्राचीन प्रकार के संदर्भ को पारित करेंगे। उस स्थिति में, आप उम्मीद करेंगे कि संकलक एक मान के साथ संदर्भ को प्रतिस्थापित करके अनुकूलित करेगा। चूंकि वेक्टर बड़े प्रकार के भंडारण कर सकते हैं, हालांकि, एक कॉन्स संदर्भ स्वीकार करना सबसे अच्छा विकल्प है।

+0

पर देखकर "संकलक ऑप्टिमाइज़ कर सकता है ..." जब तक कैली संदर्भ को संशोधित नहीं करता है, या किसी भी कोड को कॉल करने के बाद इसे पढ़ सकता है जो इसे संशोधित कर सकता है। लेकिन निश्चित रूप से जहां यह करता है, आप उम्मीद करते हैं कि "जो अधिक महंगा है" सवाल नहीं पूछेगा, बल्कि "जो सही है" :-) अजीब ऐसे मामले हैं जहां आपको लगता है कि संकलक अनुकूलित कर सकता है, लेकिन वास्तव में यह ऐसा इसलिए नहीं हो सकता है क्योंकि आपने किसी कारण को अनदेखा कर दिया है, यह एक संदर्भ होना चाहिए (अलियासिंग नियम आश्चर्य के मुख्य कारण हैं)। –

संबंधित मुद्दे

 संबंधित मुद्दे