2016-07-10 22 views
6

है nullptrhere के कार्यान्वयन देखते हुए क्या मेरा ध्यान मिल गया है कि nullptrrvalue है जिसका मतलब है कि हम इसकैसे nullptr rvalue

std::nullptr_t&& nullref = nullptr; 

की तरह कुछ कर सकते हैं लेकिन यह कैसे nullptrrvalue हो सकता है के बाद से कार्यान्वयन है इस तरह कुछ

const class {...} nullptr = {}; 

क्या यह मूल सुविधा है? मैं क्या खो रहा हूँ ?

+5

_Every_ कीवर्ड एक "मूल विशेषता" है। –

+1

यह सिर्फ 'इस' की तरह है। –

उत्तर

14

कार्यान्वयन के साथ इसके साथ कुछ लेना देना नहीं है।

कीवर्ड nullptr को एक रावल्यू अभिव्यक्ति उत्पन्न करने के लिए परिभाषित किया गया है, और यह इसका अंत है।

[C++14: 2.14.7/1]: पॉइंटर शाब्दिक कीवर्ड nullptr है। यह std::nullptr_t प्रकार का एक प्रक्षेपण है। [नोट:std::nullptr_t एक विशिष्ट प्रकार है जो न तो एक सूचक प्रकार है और न ही सदस्य प्रकार के सूचक; बल्कि, इस प्रकार का एक मूल्य एक शून्य सूचक स्थिर है और इसे शून्य सूचक मान या शून्य सदस्य सूचक मान में परिवर्तित किया जा सकता है। 4.10 और 4.11 देखें। अंत टिप्पणी]

मैं मानता हूँ तुम अपने आप को यूज़रस्पेस में इस कसौटी के यह reimplement नहीं कर सकता है, लेकिन फिर कि हर एक अन्य कीवर्ड के लिए भी मामला है।

अभिव्यक्तियां जिनमें से केवल true और false शामिल हैं, वे भी उत्सुक हैं, यदि आप उत्सुक हैं।

[C++14: 2.14.6/1]: बूलियन शाब्दिक कीवर्ड false और true हैं। इस तरह के अक्षर मूल्यवान हैं और bool टाइप करें।

4

यदि वैकल्पिक # 1 nullptr की परिभाषा थी, तो आप सही हैं कि यह एक अंतराल होगा।

const class __nullptr_t {...} __nullptr = {}; 
#define nullptr (__nullptr_t(__nullptr)); 

यही कारण है कि अंत में हालांकि नहीं मानकीकृत किया गया है: तथापि, यह एक rvalue कुछ इस तरह का उपयोग करने के लिए मजबूर किया जा सकता है। वास्तविक सी ++ 11 में, nullptr एक शाब्दिक है, वैसे ही 3.14 या 'x' जैसा ही है।

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