प्रकार T
की एक वस्तु को प्रारंभ मूल्य तय करने के एक निम्न में से एक की तर्ज पर कुछ करना होगा प्रकार विनिर्देशक, जैसे, unsigned int
:स्पष्ट प्रकार रूपांतरण और एकाधिक सरल प्रकार विनिर्देशक
unsigned int x = unsigned int();
unsigned int x((unsigned int()));
विजुअल C++ 2008 और इंटेल सी ++ संकलक 11.1 बिना चेतावनी के इन दोनों को स्वीकार करते हैं; Comau 4.3.10.1b2 और g ++ 3.4.5 (जो स्वीकार्य रूप से, विशेष रूप से हाल ही में नहीं) है।
सी ++ मानक के अनुसार (सी ++ 03 5.2.3/2, expr.type.conv):
अभिव्यक्ति
T()
, जहांT
एक सरल प्रकार-विनिर्देशक है (7.1.5.2) एक गैर सरणी पूरा ऑब्जेक्ट प्रकार या (संभवतः सीवी-योग्य)void
प्रकार के लिए, निर्दिष्ट प्रकार का एक rvalue है, जो मूल्य-प्रारंभ
7.1.5.2 कहते हैं, "सरल प्रकार विनिर्देशक हैं बनाता है , "और एक सूची के साथ अनुसरण करता है जिसमें unsigned
और int
शामिल हैं।
इसलिए, दिए गए 5.2.3/2, "सरल प्रकार-विनिर्देशक" में विलक्षण है, और unsigned
और int
दो प्रकार विनिर्देशक कि उपयोग उपरोक्त उदाहरण unsigned int
अमान्य हैं कर रहे हैं,?
यह सवाल किसी और चीज से जिज्ञासा से बाहर अधिक है (और, यदि हां, फॉलोअप है, यह माइक्रोसॉफ्ट और इंटेल का समर्थन करने के लिए गलत भाव कहा है?); एकाधिक सरल प्रकार विनिर्देशकों के संयोजन द्वारा निर्दिष्ट सभी प्रकार के लिए, मान प्रारंभिक शून्य प्रारंभिक के बराबर है। (यह प्रश्न comments in response to this answer to a question about initialization द्वारा प्रेरित किया गया था)।
आप मुझसे कैसे हिम्मत करते हैं। : 3 मुझे लगता है कि अभिव्यक्ति '(हस्ताक्षरित int)' एक प्रकार का नाम है, हालांकि। – GManNickG
@GMan: '(हस्ताक्षरित int)()' जीसीसी 3 और 4 के साथ विफल रहता है और वीसी 8 के साथ भी। 'typedef'ed संस्करण निश्चित रूप से काम करते हैं। –
एच मीटर। :( – GManNickG