C ++ 20 introduziu a std::ssize()
função livre conforme abaixo:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Uma possível implementação parece usar static_cast
, para converter o valor de retorno da size()
função-membro de cl ass C em sua contraparte assinada.
Visto que a size()
função-membro de C sempre retorna valores não negativos, por que alguém iria querer armazená-los em variáveis com sinal? Caso se queira mesmo, é uma questão de simples static_cast
.
Por que é std::ssize()
introduzido no C ++ 20?
ssizeof
operador também.
char
possui) são herdadas de C e pelo menos um pouco atenuadas por (u)intX_t
, mas ainda é uma fonte infinita de bugs igualmente sutis e críticos. Coisas como ssize
são apenas patches, e vai demorar um pouco (talvez "para sempre") até que isso afunde nos "guias de práticas recomendadas" que as pessoas (podem) seguir rigorosamente.
(u)intX_t
tipos são opcionais , não é?)