C ++ 20std::ssize()は以下のように無料関数を導入しました:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
可能な実装はcl ass Cのメンバー関数のstatic_cast戻り値を対応する符号付きに変換するためにを使用しているようです。size()
size()C のメンバー関数は常に非負の値を返すので、なぜ誰かがそれらを符号付き変数に格納したいのでしょうか?本当に望んでいる場合、それは単純な問題ですstatic_cast。
なぜstd::ssize()C ++ 20で導入されたのですか?
ssizeof演算子も追加した場合のみです。
char)はCから継承されており、少なくともによって多少は軽減されると主張できますが、(u)intX_tそれでも、同様に微妙で重大なバグの無限の原因です。のようなものssizeは単なるパッチであり、これが人々が(厳密に)従うことができる一般的な「ベストプラクティスガイド」に陥るまでには(おそらく「永久に」)時間がかかります。
(u)intX_t型がオプションであることを知っていますか?)