Seperti yang ditunjukkan Daniel Langr , std::span
memiliki operator pembanding dalam proposal awal P0122 . Operator-operator ini kemudian dihapus sejak draft kerja N4791 , dan alasannya dinyatakan dalam P1085 .
Singkatnya, copy dan const std::span
adalah "dangkal" (artinya menyalin a std::span
tidak menyalin elemen-elemen yang mendasarinya, dan sebuah const std::span
tidak mencegah elemen-elemen yang mendasarinya untuk dimodifikasi), jadi perbandingan, jika ada, juga harus "dangkal" untuk konsistensi.
Makalah itu memberikan contoh-contoh berikut:
Contoh 1:
T oldx = x;
change(x);
assert(oldx != x);
return oldx;
Contoh 2:
void read_only(const T & x);
void f()
{
T tmp = x;
read_only(x);
assert(tmp == x);
}
Pernyataan dalam contoh-contoh ini mungkin gagal jika T = std::span
, sementara itu tidak untuk tipe reguler.
Orang mungkin berpendapat bahwa std::string_view
memiliki salinan dangkal tetapi perbandingan yang mendalam. P1085 juga memiliki penjelasan untuk ini:
Ini cocok string_view
, namun string_view
tidak dapat memodifikasi elemen yang ditunjuknya, dan dengan demikian salinan dangkal string_view
dapat dianggap mirip dengan optimasi copy-on-write.
operator==
juga hilang. Esp. untuk vektor saya sering merasa nyaman untuk membandingkan secara langsung. Bisa jadi karena kesulitan mungkin dengan jenis rentang ukuran statis, meskipun saya tidak yakin.