किसी भी और सभी प्रकार के "स्ट्रिंग संदर्भ" और "सरणी संदर्भ" प्रस्तावों का उद्देश्य उन डेटा की प्रतिलिपि बनाने से बचना है जो पहले से ही कहीं और स्वामित्व में हैं और जिनमें से केवल एक गैर-म्यूटिंग दृश्य की आवश्यकता है। string_view
सवाल में ऐसे ही एक प्रस्ताव है, पहले वाले भी बुलाए गए थे string_ref
और array_ref
वे भी।
विचार हमेशा पॉइंटर-टू-फर्स्ट-एलीमेंट की जोड़ी और कुछ मौजूदा डेटा ऐरे या स्ट्रिंग के आकार को संग्रहीत करने का होता है ।
इस तरह के व्यू-हैंडल क्लास को सस्ते में मूल्य के हिसाब से पास किया जा सकता है और यह सस्ते प्रतिस्थापन संचालन की पेशकश करेगा (जिसे सरल सूचक वेतन वृद्धि और आकार समायोजन के रूप में लागू किया जा सकता है)।
स्ट्रिंग्स के कई उपयोगों में स्ट्रिंग्स के वास्तविक मालिक की आवश्यकता नहीं होती है, और प्रश्न में स्ट्रिंग अक्सर किसी और के स्वामित्व में होगी। इसलिए अनावश्यक प्रतियों से बचकर दक्षता बढ़ाने की एक वास्तविक क्षमता है (उन सभी आवंटन और अपवादों के बारे में सोचें जिन्हें आप बचा सकते हैं)।
मूल C स्ट्रिंग्स इस समस्या से पीड़ित थे कि अशक्त टर्मिनेटर स्ट्रिंग APIs का हिस्सा था, और इसलिए आप अंतर्निहित स्ट्रिंग (a la strtok
) को म्यूट किए बिना आसानी से सबस्ट्रिंग नहीं बना सकते । C ++ में, यह आसानी से लंबाई को अलग-अलग स्टोर करके और पॉइंटर और साइज को एक कक्षा में लपेटकर आसानी से हल किया जाता है।
सी ++ मानक पुस्तकालय दर्शन से एक बड़ी बाधा और विचलन, जो मैं सोच सकता हूं कि इस तरह के "संदर्भात्मक दृश्य" वर्गों में बाकी मानक पुस्तकालय से पूरी तरह से अलग-अलग स्वामित्व शब्दार्थ हैं। मूल रूप से, मानक पुस्तकालय में बाकी सब कुछ बिना शर्त सुरक्षित और सही है (यदि यह संकलित है, तो यह सही है)। इस तरह के संदर्भ वर्गों के साथ, यह अब सच नहीं है। आपके प्रोग्राम की शुद्धता इन वर्गों का उपयोग करने वाले परिवेश कोड पर निर्भर करती है। इसलिए जांच करना और सिखाना कठिन है।