C ++ 20 introdujo la std::ssize()función gratuita de la siguiente manera:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Una posible implementación parece utilizar static_castpara convertir el valor de retorno de la size()función miembro de cl ass C en su contraparte firmada.
Dado que la size()función miembro de C siempre devuelve valores no negativos, ¿por qué alguien querría almacenarlos en variables firmadas? En caso de que uno realmente quiera, es una cuestión de simple static_cast.
¿Por qué se std::ssize()introduce en C ++ 20?
ssizeofoperador también.
chartiene) se heredan de C y al menos se alivian un poco (u)intX_t, pero sigue siendo una fuente inagotable de errores igualmente sutiles y críticos. Cosas como ssizeson solo parches, y tomará un tiempo (tal vez "para siempre") hasta que esto se sumerja en las "guías de mejores prácticas" comunes que la gente (puede) seguir rigurosamente.
(u)intX_ttipos son opcionales , ¿verdad?)