ขณะที่แดเนีย Langr ชี้ให้เห็น , std::spanมีดำเนินการเปรียบเทียบในข้อเสนอครั้งแรกP0122 ผู้ประกอบการเหล่านี้จะถูกลบออกแล้วตั้งแต่ทำงานร่างN4791และเหตุผลที่มีการระบุไว้ในP1085
ในระยะสั้นคัดลอกและ const สำหรับstd::spanคือ "ตื้น" (หมายถึงการคัดลอก a std::spanไม่คัดลอกองค์ประกอบพื้นฐานและ const 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 สำหรับเวกเตอร์ฉันมักจะสะดวกที่จะเปรียบเทียบโดยตรง อาจเป็นเพราะความยากลำบากอาจเกิดขึ้นกับประเภทการขยายขนาดคงที่แม้ว่าฉันไม่แน่ใจ