दिलचस्प पोस्ट
अपने बच्चों की ऊंचाई पर एक माता पिता <div> का विस्तार करना किसी पृष्ठ पर खर्च किए गए समय को मापने के लिए कैसे? पत्र द्वारा पाठ पत्र दिखाएं indexOf केस संवेदनशील? उपयोगकर्ताओं को फ़ायरबेज का उपयोग करके नाम प्राप्त करें एक क्लासपाथ क्या है? टिक लेबल पाठ को संशोधित करें IOS पर उद्देश्य-सी में, संश्लेषित getters का उपयोग करते समय "self.foo" और "foo" के बीच (शैली) अंतर क्या है? स्थानीय फ़ाइलों के लिए xmlhttprequest जावा में एक "सरोगेट जोड़ी" क्या है? JQuery: इनपुट फ़ील्ड में परिवर्तन का पता लगाएं एंड्रॉइड – एक AsyncTask के लिए टाइमआउट सेट करना? एचटीएमएल टैग्स <div> और <span> के बीच अंतर क्या है? विंडोज स्टार्टअप पर जावा एप्लीकेशन चलाएं कैसे <mvc: annotation-driven /> से छुटकारा पाने के लिए?

एक VS2010 बग? बिना चेतावनी के बाध्यकारी गैर-कॉन्फ्रेंस संदर्भ को रैवल्यू के लिए अनुमति दे रहा है?

string foo() { return "hello"; } int main() { //below should be illegal for binding a non-const (lvalue) reference to a rvalue string& tem = foo(); //below should be the correct one as only const reference can be bind to rvalue(most important const) const string& constTem = foo(); } 
  1. जीसीसी एक संकलन त्रुटि देने के लिए अच्छा है: प्रकार के गैर-संविधान संदर्भ के अवैध प्रारंभ: std::string& एक अस्थायी प्रकार std::string
  2. VS2008 बहुत कम नहीं है क्योंकि कम से कम यह एक संकलित चेतावनी देता है: चेतावनी C4239: गैर-मानक विस्तार का उपयोग किया गया है: 'आरंभ': std::string से std::string & एक गैर-कॉन्फ़िगर संदर्भ से रूपांतरण केवल एक लावल्यू के लिए बाध्य किया जा सकता है
  3. यहाँ समस्याग्रस्त एक आता है – VS2010 (एसपी 1) किसी भी त्रुटि या चेतावनी के बिना ठीक comples, क्यों ?? !! मुझे पता है कि वीएस -2010 में रैवल्यू रेफर्यूलेशन का इस्तेमाल रेंवेल के साथ बाँध करने के लिए किया जा सकता है, लेकिन मैं डेमो कोड में बजाय && इस्तेमाल नहीं कर रहा हूँ, मैं सिर्फ गैर-कॉन्स्ट लैवल्यू संदर्भ का उपयोग कर रहा था!

क्या मुझे VS2010 के व्यवहार को यहाँ समझा सकता है? क्या यह एक बग है? धन्यवाद

वेब के समाधान से एकत्रित समाधान "एक VS2010 बग? बिना चेतावनी के बाध्यकारी गैर-कॉन्फ्रेंस संदर्भ को रैवल्यू के लिए अनुमति दे रहा है?"

यह वी.एस. कम्पाइलर का एक ज्ञात मुद्दा / सुविधा है उन्होंने हमेशा यह अनुमति दी है और ऐसा नहीं लगता है कि उस एक्सटेंशन को निकालने में कोई फर्क नहीं पड़ता।

कंपाइलर भाषा एक्सटेंशन को अक्षम कर दिया गया है, और / W4 पर एक चेतावनी के साथ एक त्रुटि जारी करेगा। हालांकि, इस कोड को हटाने से पहले कोड संकलन टूट जाएगा, और माइक्रोसॉफ्ट यह करने के लिए बहुत अनिच्छुक है। यही कारण है कि वे अपने SFINAE समर्थन को ठीक नहीं करेंगे।

इस समस्या का एक बहुत ही स्वाभाविक रूप है:

 class Foo { int _val; public: Foo(int v) : _val(v) {} void F() { std::cout << _val << std::endl; } }; class Bar { Foo& f; public: Bar(Foo& f) : f(f) {} void F() { fF(); } }; int main() { Bar b(Foo(3)); bF(); } 

इसलिए: bF() को कॉल के दौरान bf बिंदु क्या है? उपरोक्त उदाहरण, VS2013 डिफ़ॉल्ट डीबग सेटिंग के साथ संकलित, दुर्घटनाग्रस्त होने और 3 प्रिंट करने के बिना चलाता है, लेकिन मुझे संदेह था कि किसी भी अधिक जटिल उदाहरण से भ्रष्टाचार को ढेर लग जाएगा। यदि ऐसा नहीं है और कंपाइलर यह काम करने के लिए कुछ 'चतुर' कर रहा है, तो मुझे लगता है कि यह वास्तव में क्या कर रहा है यह है:

 class Foo { int _val; public: Foo(int v) : _val(v) {} void F() { std::cout << _val << std::endl; } }; class Bar { Foo f; public: Bar(Foo&& f) : f(f) {} void F() { fF(); } }; int main() { Bar b(Foo(3)); bF(); }