जैसा कि डैनियल लैंगर ने बताया , 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। वेक्टर के लिए मुझे अक्सर सीधे तुलना करना सुविधाजनक लगता है। यह स्थिर आकार अवधि प्रकार के साथ कठिनाइयों के कारण हो सकता है, हालांकि मुझे यकीन नहीं है।