2012-08-02 15 views
11

आज मैं इस कोड को देखा था, एक वर्ग के अंदर:uint32_t नाशक वापसी मान

static const uint32_t invalid_index = ~uint32_t(); 

मेरा प्रश्न है, एक uint32_t नाशक की वापसी मूल्य क्या है, और क्यों यह उपयोगी है?

उत्तर

16

एक नाशक नहीं है यही कारण है कि है, लेकिन एक बिटवाइज़ 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 
3

यह है नहीं एक नाशक, यह द्विआधारी नहीं है। यहां अमान्य अनुक्रमणिका ~ uint32_t (0) के बराबर है। सभी बिट्स सेट के साथ 32 बिट हस्ताक्षरित पूर्णांक कौन सा है। यानी, 0xffffffff।

+0

-1 "यहाँ अवैध सूचकांक uint32_t के बराबर है (~ 0)" नहीं, सामान्य रूप में नहीं। शाब्दिक एक 'int' है, और 'int' केवल 16 बिट्स की गारंटी है। –

+0

"शाब्दिक एक int है, और int केवल 16 बिट्स की गारंटी है"। क्या Uint32 32 बिट्स की गारंटी नहीं है? – user1507133

+0

@ user1507133, हाँ, लेकिन '0'' uint32_t' नहीं है, यह 'int' है, और इसलिए' ~ 0' –

1

यह बिटवाइज़ नहीं है और यह लोगों को 'पूरक खोजने के लिए इस्तेमाल किया जा सकता है (जैसे। ~ 1011 = 0100) या एक मध्यवर्ती चरण जब 2s पूरक खोजने की कोशिश कर (जैसे। [~ 1011] 0001 के रूप में = 0101)।

8

सबसे पहले, के रूप में कई पहले से ही उल्लेख किया है, कोड तुमने देखा,

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. 
+7

@downvoter: कृपया अपनी अंतर्दृष्टि समझाएं ताकि अन्य गंभीरता से आपको लेने से बच सकें। –

संबंधित मुद्दे