2016-11-24 9 views
5

VS2015 अद्यतन 3 के लिए असाइनमेंट बिना किसी त्रुटि और कोई चेतावनी के संकलित करता है। फिर भी मैं इस धारणा के तहत था कि अस्थायी केवल संदर्भों को संदर्भित कर सकते हैं। क्या यह गैर-अनुरूप है या क्या मैं कुछ गलत समझ रहा हूं? हालांकि इस सवाल का विशेष रूप से VS2015 बारे में नहीं है और स्थित नहीं किया गया था जब मैं इस एक के ऊपर टाइप कियागैर-कॉन्स संदर्भ

struct Foo {}; 
Foo Func6() { return Foo(); } 

TEST(Arguments, NonConstReference) 
{ 
    Foo& bob = Func6(); 
} 

संपादित

सवाल marcinj से जुड़े हुए, एक ही मुद्दा है।

मैंने यह देखने के लिए/W4 का उपयोग करके परीक्षण किया था कि मुझे कोई चेतावनी मिली है और मुझे कोई नहीं देखा है, लेकिन फिर से परीक्षण करना मुझे लगता है कि अब मैं करता हूं। एक सेटिंग VS2015 को समायोजित करने के लिए प्रोजेक्ट गुणों को खोलते समय वर्तमान में चयनित एक की तुलना में एक अलग बिल्ड कॉन्फ़िगरेशन के लिए प्रॉपर्टी डायलॉग सेट दिखाने की आदत है, जो कि मुझे कई बार पकड़ा गया है, और मुझे यकीन है कि जारी रहेगा ऐसा करने के लिए)।

जैसा अक्षम भाषा एक्सटेंशन (/ जेए) का उपयोग कर उस अन्य प्रश्न में उल्लिखित है, यह एक त्रुटि बनाता है, लेकिन दुर्भाग्यवश दुर्भाग्य से उपयोग करने योग्य समाधान नहीं है क्योंकि माइक्रोसॉफ्ट के अपने प्लेटफार्म हेडर संकलित नहीं होंगे।

उत्तर

7

एमएसवीसी कंपाइलर में एक गैर-मानक एक्सटेंशन है, जो डिफ़ॉल्ट रूप से सक्षम है, जो अस्थायी को गैर-const संदर्भों से जुड़ने की अनुमति देता है। इसे अक्षम करने के लिए, command-line option /Za या संबंधित प्रोजेक्ट प्रॉपर्टी का उपयोग करें।

+0

इस के उपयोग को कभी समझ नहीं आया। –

+0

@ जब आप रावल्यू रेफ करते हैं तो गिलबेट्स और भी बेकार! –

+1

@GuillaumeRacicot बेशक, यह एक्सटेंशन कम से कम एक दशक तक रावल संदर्भों की भविष्यवाणी करता है, इसलिए मुझे नहीं लगता कि यह उचित तुलना है। – Angew