C ++ 20 đã giới thiệu std::ssize()
hàm miễn phí như sau:
template <class C>
constexpr auto ssize(const C& c)
-> std::common_type_t<std::ptrdiff_t,
std::make_signed_t<decltype(c.size())>>;
Một triển khai khả thi dường như sử dụng static_cast
, để chuyển đổi giá trị trả về của size()
hàm thành viên của cl ass C thành đối tác có dấu của nó.
Vì size()
hàm thành viên của C luôn trả về các giá trị không âm, tại sao mọi người lại muốn lưu trữ chúng trong các biến có dấu? Trong trường hợp một người thực sự muốn, đó là một vấn đề đơn giản static_cast
.
Tại sao lại được std::ssize()
giới thiệu trong C ++ 20?
ssizeof
toán tử là tốt.
char
có bao nhiêu bit ) được thừa hưởng từ C và ít nhất là phần nào được giảm bớt (u)intX_t
, nhưng nó vẫn là một nguồn vô tận của những lỗi tinh vi và nghiêm trọng không kém . Những thứ như ssize
chỉ là các bản vá và sẽ mất một thời gian (có thể là "mãi mãi") cho đến khi điều này chìm vào "hướng dẫn thực hành tốt nhất" phổ biến mà mọi người (có thể) tuân theo một cách nghiêm ngặt.
(u)intX_t
loại là không bắt buộc , phải không?)