जैसा कि डैनियल लैंगर ने बताया , std::span
इसके शुरुआती प्रस्ताव P0122 में तुलना ऑपरेटर हैं । इन ऑपरेटरों को काम के मसौदे N4791 के बाद से हटा दिया जाता है , और इसका कारण P1085 में बताया गया है ।
संक्षेप में, std::span
"उथले" के लिए प्रतिलिपि और कॉन्स्टेंस हैं (जिसका अर्थ std::span
है कि इसकी अंतर्निहित तत्वों की प्रतिलिपि नहीं है, और एक कॉस्ट std::span
इसके अंतर्निहित तत्वों को संशोधित होने से नहीं रोकता है), इसलिए तुलना, यदि मौजूद है, तो "उथले" भी होना चाहिए स्थिरता के लिए।
वह कागज निम्नलिखित उदाहरण देता है:
उदाहरण 1:
T oldx = x;
change(x);
assert(oldx != x);
return oldx;
उदाहरण 2:
void read_only(const T & x);
void f()
{
T tmp = x;
read_only(x);
assert(tmp == x);
}
इन उदाहरणों में अभिकथन विफल हो सकता है T = std::span
, जबकि यह नियमित प्रकारों के लिए नहीं है।
कोई तर्क दे सकता है कि std::string_view
उथली प्रतिलिपि है लेकिन गहरी तुलना। P1085 ने इसके लिए एक स्पष्टीकरण भी दिया है:
यह मैच string_view
, हालांकि, string_view
इसके द्वारा इंगित किए गए तत्वों को संशोधित नहीं कर सकता है, और इस प्रकार उथले प्रति को string_view
कॉपी-ऑन-राइट ऑप्टिमाइज़ेशन के समान माना जा सकता है।
operator==
भी गायब है। Esp। वेक्टर के लिए मुझे अक्सर सीधे तुलना करना सुविधाजनक लगता है। यह स्थिर आकार अवधि प्रकार के साथ कठिनाइयों के कारण हो सकता है, हालांकि मुझे यकीन नहीं है।