C ++ 20 memperkenalkan std::ssize()
fungsi gratis seperti di bawah ini:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Sebuah implementasi yang mungkin tampaknya menggunakan static_cast
, untuk mengubah nilai kembali dari size()
fungsi anggota cl ass C menjadi mitra yang ditandatangani.
Karena size()
fungsi anggota C selalu mengembalikan nilai non-negatif, mengapa ada orang yang ingin menyimpannya dalam variabel bertanda? Jika seseorang benar-benar menginginkannya, ini masalah sederhana static_cast
.
Mengapa std::ssize()
diperkenalkan di C ++ 20?
ssizeof
operator juga.
char
dimiliki) diwarisi dari C dan setidaknya diringankan oleh (u)intX_t
, tetapi itu masih merupakan sumber bug yang sama-sama halus dan kritis tanpa akhir. Hal-hal seperti ssize
itu hanyalah tambalan, dan akan memakan waktu (mungkin "selamanya") sampai ini masuk ke dalam "panduan praktik terbaik" umum yang (dapat) diikuti orang dengan ketat.
(u)intX_t
jenis yang opsional , kan?)