C ++ 20 ha introdotto ilstd::ssize()
funzione gratuita come di seguito:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Una possibile implementazione sembra usare static_cast
, per convertire il valore restituito dalla size()
funzione membro di cl ass C nella sua controparte firmata.
Dal momento che il size()
funzione membro di C restituisce sempre valori non negativi, perché qualcuno dovrebbe volerli memorizzare in variabili con segno? Nel caso in cui si voglia davvero, è una questione di semplice static_cast
.
Perché è stato std::ssize()
introdotto in C ++ 20?
ssizeof
operatore.
char
ha) sono ereditate da C e almeno un po 'alleviate da (u)intX_t
, ma è ancora una fonte infinita di bug altrettanto sottili e critici. Cose come ssize
sono solo patch, e ci vorrà del tempo (forse "per sempre") prima che questo affondi nelle comuni "guide alle migliori pratiche" che le persone (possono) seguire rigorosamente.
(u)intX_t
tipi sono opzionali , vero?)