C ++ 20 führte die std::ssize()
freie Funktion wie folgt ein:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Eine mögliche Implementierung scheint zu verwenden static_cast
, um den Rückgabewert der size()
Mitgliedsfunktion von cl ass C in sein vorzeichenbehaftetes Gegenstück umzuwandeln .
Da die size()
Mitgliedsfunktion von C immer nicht negative Werte zurückgibt, warum sollte jemand sie in vorzeichenbehafteten Variablen speichern wollen? Wenn man es wirklich will, ist es eine Frage der Einfachheit static_cast
.
Warum wird std::ssize()
in C ++ 20 eingeführt?
ssizeof
Operator hinzufügen .
char
hat) von C geerbt und zumindest etwas gemildert werden (u)intX_t
, aber es ist immer noch eine endlose Quelle von ebenso subtilen und kritischen Fehlern. Dinge wie ssize
sind nur Patches, und es wird eine Weile dauern (vielleicht "für immer"), bis dies in die gängigen "Best Practices Guides" einfließt, denen die Leute rigoros folgen (können).
(u)intX_t
Typen optional sind , oder?)