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();
}
- जीसीसी संकलन त्रुटि देने के लिए अच्छा है:
std::string
- VS2008 अस्थायी प्रकार से
std::string&
के गैर-कॉन्स्ट संदर्भ का अमान्य प्रारंभिकता बहुत खराब नहीं है क्योंकि कम से कम यह देता है संकलन चेतावनी: चेतावनी C4239: गैर-मानक विस्तार का उपयोग किया जाता है: 'प्रारंभिक':std::string
सेstd::string &
रूपांतरण एक गैर-कॉन्स संदर्भ केवल एक lvalue - से बाध्य हो सकता है यहां समस्याग्रस्त एक - VS2010 (SP1) कॉम्प्लेक्स ठीक है किसी भी त्रुटि या चेतावनी के बिना, क्यों ?? !! मुझे पता है कि VS2010 में rvalue संदर्भ का उपयोग रावल्यू के साथ बाध्य करने के लिए किया जा सकता है लेकिन मैं डेमो कोड में बजाय
&&
का उपयोग नहीं कर रहा हूं, मैं बस गैर-कॉन्स्ट लैल्व संदर्भ का उपयोग कर रहा था!
क्या कोई मुझे वीएस -2010 के व्यवहार की व्याख्या करने में मदद कर सकता है? क्या यह एक बग है? धन्यवादएक वीएस -2010 बग? एक चेतावनी के बिना रैवल्यू के बाध्यकारी गैर-कॉन्स संदर्भ को अनुमति देना?
आपकी चेतावनी सेटिंग्स क्या हैं? शायद यह आपकी कॉन्फ़िगरेशन है जो बदल गई है, न कि उनके कार्यान्वयन? –
मैं थोड़ी देर के लिए वीएस -2008 का उपयोग कर रहा हूं लेकिन हाल ही में स्थापित वीएस -2010 इसलिए वीएस 10 इसे इसकी डिफ़ॉल्ट सेटिंग का उपयोग करना चाहिए ... – Gob00st
तो मुझे डर है कि चेतावनी सीमा बस इतना अधिक नहीं है। '4xxx' रेंज में चेतावनियां सक्रिय करने के लिए' \ W4' का उपयोग करें। –