C ++ 20 представив std::ssize()
безкоштовну функцію, як показано нижче:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Можлива реалізація, схоже, використовує static_cast
для перетворення повернутого значення size()
функції члена cl ass C в його підписаний аналог.
Оскільки size()
функція члена C завжди повертає негативні значення, чому б хто-небудь хотів зберігати їх у підписаних змінних? У випадку, якщо хтось дійсно хоче, це справа просто static_cast
.
Чому std::ssize()
вводиться в C ++ 20?
ssizeof
оператора.
char
має) успадковуються від C і принаймні дещо полегшуються (u)intX_t
, але це все-таки нескінченне джерело однаково тонких і критичних помилок. Такі речі ssize
є лише виправленнями, і це займе певний час (можливо, "назавжди"), поки це не зануриться в загальні "посібники з найкращих практик", яких люди (можуть) суворо дотримуватися.
(u)intX_t
типи необов'язково , що не так чи що?)