एक hyperlinked C++ grammar का उपयोग करना, decltype(void())
की पार्स है:
decltype(expression)
decltype(assignment-expression)
decltype(conditional-expression)
... आपरेशन के आदेश से जुड़े कदमों में से बहुत से यहाँ जाना ...
decltype(postfix-expression)
decltype(simple-type-specifier (expression-listopt))
decltype(void())
तो void()
expression
की तरह है यहां, विशेष रूप से postfix-expression
।
विशेष रूप से, के हवाले से खंड 5.2.3 [expr.type.conf] 2011 आईएसओ सी ++ मानक के पैरा 2:
अभिव्यक्ति T()
, जहां T
एक सरल प्रकार-विनिर्देशक या है typename-विनिर्देशक एक गैर सरणी पूरा ऑब्जेक्ट प्रकार या (संभवतः सीवी-योग्य) void
प्रकार के लिए, निर्दिष्ट प्रकार है, जो मूल्य-प्रारंभ (8.5 है की एक prvalue बनाता है, कोई प्रारंभ void()
मामले के लिए किया जाता है)।
तो void()
, प्रकार void
की अभिव्यक्ति है बस के रूप में int()
प्रकार int
(मूल्य 0
के साथ) की अभिव्यक्ति है। स्पष्ट रूप से एक शून्य अभिव्यक्ति का कोई मूल्य नहीं है, लेकिन यहां यह decltype
का संचालन है, इसलिए इसका मूल्यांकन नहीं किया जाता है। decltype
केवल अपने ऑपरेंड के प्रकार को संदर्भित करता है, न कि इसका मूल्य।
decltype(void())
void
प्रकार का जिक्र करने का एक वर्बोज़ तरीका है।
@skypjack: सी ++ 11 मानक (या एक मसौदा), खंड 5.2.3 [expr.type.conv], अनुच्छेद 2. देखें * एक सरल-प्रकार-विनिर्देशक * खाली कोष्ठक के बाद "का एक प्रावधान बनाता है निर्दिष्ट प्रकार, जो मूल्यवान है (8.5; शून्य() मामले के लिए कोई प्रारंभिकता नहीं की जाती है) "। जैसे 'int() 'प्रकार' int' की अभिव्यक्ति है,' शून्य() 'प्रकार 'शून्य' की अभिव्यक्ति है। और चूंकि यह 'decltype' का संचालन है, इसका मूल्यांकन नहीं किया जाता है। 'decltype (शून्य()) 'प्रकार' शून्य 'का जिक्र करने का एक जटिल तरीका है। (याक, आप अपने उत्तर का विस्तार करना चाहते हैं कि कैसे 'शून्य()' अभिव्यक्ति है।) –
@Yakk जैसा कि पहले से ही टिप्पणियों में उल्लिखित है, अधिक जानकारी के साथ उत्तर का विस्तार करने में मदद मिलेगी। सुझाव को बढ़ावा देने के लिए +1। धन्यवाद। – skypjack
मैंने 'शून्य()' साधनों का स्पष्टीकरण जोड़ने की स्वतंत्रता ली है। सटीकता के लिए कृपया मेरे अपडेट की जांच करें। –