आज मैं इस कोड को देखा था, एक वर्ग के अंदर:uint32_t नाशक वापसी मान
static const uint32_t invalid_index = ~uint32_t();
मेरा प्रश्न है, एक uint32_t
नाशक की वापसी मूल्य क्या है, और क्यों यह उपयोगी है?
आज मैं इस कोड को देखा था, एक वर्ग के अंदर:uint32_t नाशक वापसी मान
static const uint32_t invalid_index = ~uint32_t();
मेरा प्रश्न है, एक uint32_t
नाशक की वापसी मूल्य क्या है, और क्यों यह उपयोगी है?
एक नाशक नहीं है यही कारण है कि है, लेकिन एक बिटवाइज़ NOT
ऑपरेटर के लिए एक मूल्य प्रारंभuint32_t
लागू होता है। ताकि आप बिटवाइज़ 0
की NOT
ले जा रहे हैं
एक अभिन्न प्रकार प्रारंभ मूल्य, 0
है।
के समान:
uint32_t x = uint32_t(); // 32 0's in binary form
uint32_t y = ~x; // 32 1's in binary form
यह है नहीं एक नाशक, यह द्विआधारी नहीं है। यहां अमान्य अनुक्रमणिका ~ uint32_t (0) के बराबर है। सभी बिट्स सेट के साथ 32 बिट हस्ताक्षरित पूर्णांक कौन सा है। यानी, 0xffffffff।
यह बिटवाइज़ नहीं है और यह लोगों को 'पूरक खोजने के लिए इस्तेमाल किया जा सकता है (जैसे। ~ 1011 = 0100) या एक मध्यवर्ती चरण जब 2s पूरक खोजने की कोशिश कर (जैसे। [~ 1011] 0001 के रूप में = 0101)।
सबसे पहले, के रूप में कई पहले से ही उल्लेख किया है, कोड तुमने देखा,
static const uint32_t invalid_index = ~uint32_t();
एक नाशक कॉल लेकिन बिटवाइज़ नहीं है "नहीं" ~
, प्रकार, uint32_t()
का डिफ़ॉल्ट मान के लिए आवेदन किया, यानी ~(uint32_t(0))
।
आपके सवाल का अब,
मेरा प्रश्न है, एक uint32_t नाशक की वापसी मूल्य क्या है, और क्यों यह उपयोगी है?
छद्म नाशक (यह ’ नहीं रों कोई वास्तविक नाशक, एक नाशक कॉल के रूप में ही अंकन के साथ सिर्फ एक do-कुछ भी नहीं आपरेशन) की वापसी प्रकार void
है, और यह ’ के लिए मुख्य रूप से उपयोगी है जेनेरिक प्रोग्रामिंग जहां आप ’ टी प्रकार को जानते हैं।
उदाहरण:
uint32_t x;
x.~uint32_t(); // Silly but valid, a pseudo-destructor call.
@downvoter: कृपया अपनी अंतर्दृष्टि समझाएं ताकि अन्य गंभीरता से आपको लेने से बच सकें। –
-1 "यहाँ अवैध सूचकांक uint32_t के बराबर है (~ 0)" नहीं, सामान्य रूप में नहीं। शाब्दिक एक 'int' है, और 'int' केवल 16 बिट्स की गारंटी है। –
"शाब्दिक एक int है, और int केवल 16 बिट्स की गारंटी है"। क्या Uint32 32 बिट्स की गारंटी नहीं है? – user1507133
@ user1507133, हाँ, लेकिन '0'' uint32_t' नहीं है, यह 'int' है, और इसलिए' ~ 0' –