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
型がオプションであることを知っていますか?)