2010-11-08 10 views
7

मेरा प्रश्न Prasoon के question से संबंधित है जो गैर पीओडी प्रकारों और मूल्य प्रारंभिकरण के बारे में है।क्या विचार और कोडेपैड वास्तव में सी ++ 03 का समर्थन नहीं करता है?

मैंने आइडिया और कोडेपैड जैसे ऑनलाइन कंपाइलरों पर निम्न कोड का प्रयास किया लेकिन निष्पादन योग्य दोनों साइटों पर रनटाइम त्रुटि दी।

#include <iostream> 
#include <cassert> 

struct Struct { 
    std::string String; 
    int Int; 
    bool k; 
}; 

struct InStruct:Struct 
{ 
    InStruct():Struct(){} 
}; 

int main() 
{ 
    InStruct i; 
    assert (i.Int == 0); 
    std::cout << "Hello"; 
} 

Ideone आउटपुट here
Codepad आउटपुट here

करता है मतलब है कि उनमें से कोई भी सी ++ 03 मूल्य आरंभीकरण सुविधा का समर्थन?

उत्तर

4

करता है मतलब है कि उनमें से कोई भी सी ++ 03 मूल्य आरंभीकरण सुविधा का समर्थन की तरह एक अभिव्यक्ति कुछ की आवश्यकता होगी?

हां।

संस्करण 4.4 से पहले, जीसीसी ने मूल्य प्रारंभिकता का पूरी तरह से समर्थन नहीं किया (the Boost GCC compatibility header इसे समझाता है और प्रासंगिक जीसीसी दोष रिपोर्ट के लिंक हैं; लाइन 77 देखें)।

यदि आपके कोड को पोर्टेबल होने की आवश्यकता है, तो आपको मूल्य प्रारंभिकरण पर भरोसा करना चाहिए; जीसीसी ने हाल ही में इसे पूरी तरह से समर्थन नहीं दिया है और विजुअल सी ++ अपने नवीनतम संस्करण, विज़ुअल सी ++ 2010 में भी इसका पूरी तरह से समर्थन नहीं करता है।

0

घोषणा

InStruct i; 

आह्वान नहीं करता मूल्य प्रारंभ

$ 8.5.3/10 - "एक वस्तु जिसका प्रारंभकर्ता कोष्ठकों के एक खाली सेट है, यानी,(), करेगा मूल्य-प्रारंभिक हो। "

आप मूल्य आरंभ करना चाहते हैं, तो आप

assert(InStruct().Int == 0); 
+0

ओ ओ किसी को डाउनवॉट किया गया है लेकिन टिप्पणी – Chubsdad

+2

'इंस्ट्रक्चर' का डिफॉल्ट कन्स्ट्रक्टर है। –

+0

@ जेम्स मैकनेलिस: लेकिन बेस क्लास 'स्ट्रक्चर' (जो 'इंट' के रूप में नहीं है) – Chubsdad

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