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_cast
para 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?
ssizeof
operador también.
char
tiene) 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 ssize
son 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_t
tipos son opcionales , ¿verdad?)