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 गधा सी के सदस्य समारोह के वापसी मूल्य को अपने हस्ताक्षरित समकक्ष में परिवर्तित करने के लिए ।
चूंकि size()
C का सदस्य फ़ंक्शन हमेशा गैर-नकारात्मक मान लौटाता है, कोई भी उन्हें हस्ताक्षरित चर में क्यों संग्रहीत करना चाहेगा? यदि कोई वास्तव में चाहता है, तो यह साधारण बात है static_cast
।
std::ssize()
C ++ 20 में क्यों पेश किया गया है?
ssizeof
ऑपरेटर भी जोड़ते हैं ।
char
हैं) C से विरासत में मिले हैं और कम से कम कुछ हद तक कम हो गए हैं (u)intX_t
, लेकिन यह अभी भी समान रूप से सूक्ष्म और महत्वपूर्ण बग का एक अंतहीन स्रोत है । इस तरह की चीजें ssize
केवल पैच हैं, और इसमें कुछ समय लगेगा (शायद "हमेशा के लिए") जब तक यह आम "सर्वोत्तम प्रथाओं गाइड" में डूब नहीं जाता है कि लोग (सकते हैं) सख्ती से पालन करें।
(u)intX_t
प्रकार के होते हैं वैकल्पिक , है न?)