क्या कोई ऐसा मामला है जहां पास-दर-संदर्भ सी ++ में पास-बाय-वैल्यू से अधिक महंगा है? यदि हां, तो वह मामला क्या होगा?संदर्भ द्वारा पारित मूल्य से अधिक महंगा
उत्तर
आदिम प्रकार (int, char, float, ...) और पीओडी structs गुजरना पसंद करते हैं जो मूल्य के अनुसार प्रतिलिपि (प्वाइंट, जटिल) के लिए सस्ते हैं।
यह संदर्भ द्वारा पारित होने पर आवश्यक संकेत से अधिक कुशल होगा।
Boost's Call Traits देखें।
टेम्पलेट वर्ग
call_traits<T>
"सर्वश्रेष्ठ" विधि समाहित करने के लिए या एक समारोह से कुछ प्रकार टी के एक पैरामीटर पारित करने के लिए, और नीचे दी गई तालिका में के रूप में परिभाषित typedefs का एक संग्रह के होते हैं।call_traits
का उद्देश्य यह सुनिश्चित करना है कि "संदर्भों के संदर्भ" जैसी समस्याएं कभी न हों, और यह पैरामीटर संभवतः सबसे प्रभावी तरीके से पारित किए जाते हैं।
हां, संदर्भ तर्क द्वारा पारित होने तक पहुंच के लिए मूल्य तर्क द्वारा पारित होने से अधिक संकेतों की आवश्यकता हो सकती है। इसके अलावा, तर्क का आकार एक सूचक के आकार से छोटा होने पर धीमा हो सकता है। बेशक, यह सब मानते हैं कि संकलक इसे अनुकूलित नहीं कर रहा है।
आप प्रतिलिपि इलिजन और RVO (मूल्य अनुकूलन द्वारा वापसी) के बारे में इस लेख "Want speed ? Pass by value" पढ़ सकते हैं। यह बताता है कि संदर्भ कभी-कभी संकलक को ऐसा करने से रोकते हैं।
कंपाइलर केवल मूल्य से गुजरने के संदर्भ में एक आदिम प्रकार को पारित करने का अनुकूलन कर सकता है, यदि प्रकार एक समान आकार या संदर्भ/सूचक के आकार से छोटा है। इस बात की कोई गारंटी नहीं है कि कंपाइलर ऐसा करेगा, इसलिए यदि आपके पास कोई विकल्प है, तो मूल्य के आधार पर आदिम प्रकारों को पास करें। हालांकि, टेम्पलेट कोड में, आपको अक्सर संदर्भ द्वारा पास करना होगा - वेक्टर के push_back पर विचार करें जो एक कॉन्स्ट संदर्भ लेता है। यदि आपके पास स्याही का वेक्टर है, तो आप एक प्राचीन प्रकार के संदर्भ को पारित करेंगे। उस स्थिति में, आप उम्मीद करेंगे कि संकलक एक मान के साथ संदर्भ को प्रतिस्थापित करके अनुकूलित करेगा। चूंकि वेक्टर बड़े प्रकार के भंडारण कर सकते हैं, हालांकि, एक कॉन्स संदर्भ स्वीकार करना सबसे अच्छा विकल्प है।
पर देखकर "संकलक ऑप्टिमाइज़ कर सकता है ..." जब तक कैली संदर्भ को संशोधित नहीं करता है, या किसी भी कोड को कॉल करने के बाद इसे पढ़ सकता है जो इसे संशोधित कर सकता है। लेकिन निश्चित रूप से जहां यह करता है, आप उम्मीद करते हैं कि "जो अधिक महंगा है" सवाल नहीं पूछेगा, बल्कि "जो सही है" :-) अजीब ऐसे मामले हैं जहां आपको लगता है कि संकलक अनुकूलित कर सकता है, लेकिन वास्तव में यह ऐसा इसलिए नहीं हो सकता है क्योंकि आपने किसी कारण को अनदेखा कर दिया है, यह एक संदर्भ होना चाहिए (अलियासिंग नियम आश्चर्य के मुख्य कारण हैं)। –
- 1. मूल्य और संदर्भ द्वारा संदर्भ
- 2. क्या कोल्डफ्यूजन ऑब्जेक्ट संदर्भ या मूल्य से पारित होते हैं?
- 3. संदर्भ द्वारा कार्यों के लिए एक अभिन्न प्रकार के चर को पारित करेगा, मूल्य से अधिक कुशल होगा?
- 4. संदर्भ द्वारा पारित numpy arrays हैं?
- 5. क्या एरे द्वारा मूल्य पारित किया गया है या जावा में संदर्भ द्वारा पारित किया गया है?
- 6. एक रिलेवेटलाइट लाइनरलायआउट से अधिक महंगा है?
- 7. डेल्फी: संदर्भ द्वारा पास या मूल्य से पास?
- 8. क्या छोटे सरल structs को संदर्भ संदर्भ से पारित किया जाना चाहिए?
- 9. उलझन में, क्या जावा ऑब्जेक्ट संदर्भ पारित होने पर संदर्भ द्वारा मूल्य या कॉल द्वारा कॉल का उपयोग करता है?
- 10. पायथन: संदर्भ द्वारा पारित एक चर और मूल्य के अनुसार कब होता है?
- 11. गुण - मूल्य या संदर्भ के द्वारा?
- 12. मूल्य से संदर्भित सी ++ स्ट्रिंग्स या संदर्भ
- 13. रैवल्यू संदर्भ द्वारा और अधिक कुशल द्वारा लौट रहा है?
- 14. आरएमआई में संदर्भ द्वारा पारित करना संभव है?
- 15. संदर्भ के द्वारा सरल प्रकारों को पारित करने के कारण?
- 16. संदर्भ द्वारा पारित करने का अच्छा विचार कब नहीं है?
- 17. shared_ptr - संदर्भ द्वारा बनाम पास मूल्य से गुजरती
- 18. उद्देश्य सी - मूल्य से पास और संदर्भ द्वारा पास
- 19. केवल चर संदर्भ त्रुटि द्वारा पारित किया जा सकता
- 20. C99 स्थिरांक पारित-दर-मूल्य
- 21. पीएचपी सरणियों और पारित-दर-संदर्भ
- 22. अधिक महंगा, तुलना या असाइनमेंट क्या है?
- 23. सी ++ 64 बिट int: संदर्भ द्वारा पास या मूल्य
- 24. एसक्यूएल ऑर्डर द्वारा कितना महंगा है?
- 25. संदर्भ प्रदर्शन द्वारा मूल्य बनाम पास द्वारा पास करें सी # .net
- 26. क्यों आप C++ मूल्य द्वारा एक वस्तु से होकर गुजरेगा
- 27. क्या सी ++ कंपाइलर्स कॉपी द्वारा पारित संदर्भ पीओडी पैरामीटर द्वारा पास ऑप्टिमाइज़ करते हैं?
- 28. संदर्भ द्वारा मूल्यों को पारित करने से गति में काफी सुधार होता है?
- 29. यदि ऑब्जेक्ट्स उपनाम द्वारा पारित किए जाते हैं तो आप संदर्भ से कब गुज़रेंगे?
- 30. मूल्य से या सी ++ 11 यूनिवर्सल संदर्भ द्वारा म्यूटर्स पास करें?
तो कोई यह कैसे पता लगा सकता है कि उसका कंपाइलर इसे अनुकूलित कर रहा है या नहीं? – Arthur
बाइनरी कोड –