ग्लोबल नेम स्पेस में निम्नलिखित घोषणा को देखते हुए:स्थिर स्थिरांक चर के स्व-प्रारंभिकरण, क्या यह अच्छी तरह से गठित है?
constexpr int x = x;
इस अच्छी तरह से गठित है?
मसौदा सी ++ 14 मानक खंड 3.6.2
[basic.start.init] का कहना है:
स्थिर भंडारण अवधि (3.7.1) या धागा भंडारण अवधि (3.7.2) के साथ चर करेगा किसी अन्य प्रारंभिक होने से पहले शून्य-प्रारंभिक (8.5) बनें। [...]
क्या उदाहरण अच्छी तरह से परिभाषित करने के लिए लगता है कि x
निरंतर आरंभीकरण जो 0
कारण शून्य प्रारंभ करने के लिए किया जाएगा के दौरान अपनी ही मूल्य के साथ आरंभ नहीं हो जाता है।
क्या यह वास्तव में मामला है? बजना accepts this code जबकि gcc produces a diagnostic:
error: the value of 'x' is not usable in a constant expression
constexpr int x = x;
^
यह कभी अपरिभाषित व्यवहार नहीं है। –
@ टी.सी. जब मैंने यूबी का उल्लेख किया, तो मैं [इस मामले] के बारे में सोच रहा था (http://stackoverflow.com/q/14935722/1708801) और संबंधित [सी ++ 14 संस्करण यहां] (http://stackoverflow.com/q/ 23415661/1708801)। मैंने मूल रूप से उन्हें प्रश्न में संदर्भित किया था लेकिन ऐसा लगा कि यह कम स्पष्ट हो गया था। –
निश्चित रूप से, लेकिन इस संदर्भ में, कुछ भी जो यूबी होगा निरंतर अभिव्यक्ति नहीं है, इसके बजाय आरंभिकता को खराब बना दिया गया है। –