C ++ 20 wprowadził std::ssize()
bezpłatną funkcję, jak poniżej:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Wydaje się static_cast
, że możliwa implementacja polega na przekształceniu wartości zwracanej size()
funkcji składowej klasy C na jej podpisany odpowiednik.
Ponieważ size()
funkcja składowa C zawsze zwraca wartości nieujemne, dlaczego ktoś miałby chcieć przechowywać je w podpisanych zmiennych? Na wypadek, gdyby ktoś naprawdę chciał, jest to prosta sprawa static_cast
.
Dlaczego std::ssize()
wprowadzono w C ++ 20?
ssizeof
operator.
char
ma) są dziedziczone po C i przynajmniej w pewnym stopniu łagodzone przez (u)intX_t
, ale wciąż jest to nieskończone źródło równie subtelnych i krytycznych błędów. ssize
Takie rzeczy są tylko łatkami i zajmie trochę czasu (może „na zawsze”), zanim zagłębią się w powszechne „przewodniki po najlepszych praktykach”, których ludzie (mogą) rygorystycznie przestrzegać.
(u)intX_t
typy są opcjonalne , prawda?)