C ++ 20 a introduit lestd::ssize()
fonction gratuite comme ci-dessous:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Une implémentation possible semble utiliser static_cast
, pour convertir la valeur de retour de la size()
fonction membre de cl ass C en son équivalent signé.
Depuis le size()
fonction membre de C renvoie toujours des valeurs non négatives, pourquoi quelqu'un voudrait-il les stocker dans des variables signées? Au cas où on le voudrait vraiment, c'est simple static_cast
.
Pourquoi est std::ssize()
introduit dans C ++ 20?
ssizeof
opérateur.
char
a) sont héritées de C et au moins quelque peu atténuées par (u)intX_t
, mais c'est toujours une source infinie de bogues tout aussi subtils et critiques. Des choses comme ssize
ne sont que des correctifs, et cela prendra un certain temps (peut-être "pour toujours") jusqu'à ce que cela pénètre dans les "guides des meilleures pratiques" que les gens (peuvent) suivre rigoureusement.
(u)intX_t
types sont en option , pensez - vous?)