निम्न कोड विजुअल स्टूडियो 2008 में संकलित करता है लेकिन विजुअल स्टूडियो 2013 और बाद में विफल रहता है। बाइनरी '==':स्ट्रीम ऑपरेटर का मूल्यांकन >> बूलियन
std::string str("foo");
std::stringstream ss(str);
float f = 0;
if ((ss >> f) == false)
std::cout << "Parse error\n";
त्रुटि संदेश
त्रुटि C2678 है कोई ऑपरेटर पाया जो एक बाएं हाथ प्रकार के संकार्य लेता है 'std :: basic_istream>' (या वहाँ कोई स्वीकार्य रूपांतरण)
है और इस प्रकार सफलतापूर्वक बदलकर तय हो गई है:
if (!(ss >> f))
std::cout << "Parse error\n";
मुझे यह अच्छी तरह से समझ में नहीं आ रहा है। मेरा सवाल यह है कि, ऑपरेटर या कास्ट या शायद ios
झंडे शामिल हैं जो धारा को पहले स्थान पर बूलियन के रूप में मूल्यांकन करने की अनुमति देते हैं, और फिर operator==
की कमी क्यों होती है?
उल्लेख करने योग्य कुछ बात यह है कि 'अगर (foo) 'या' if (! Foo) '' ऑपरेटर बूल' को 'स्पष्ट 'चिह्नित किया गया है, तो' बूल 'ऑपरेटरों के स्पष्ट रूपांतरणों के बारे में कुछ अपवादों में से एक के कारण। उदाहरण [यहां] (http://coliru.stacked-crooked.com/a/e884a7adaf92a472)। मेरा मानना है कि इसे ** प्रासंगिक रूपांतरण ** कहा जाता है, उदाहरण के लिए देखें। [यह ब्लॉग पोस्ट] (http://chris-sharpe.blogspot.ca/2013/07/contextually-converted-to-bool.html)। – vsoftco
'NULL' एक मैक्रो है जो * ए * नल पॉइंटर स्थिरता तक फैलता है, न कि" शून्य "स्थिर, न ही" शून्य सूचक स्थिर "शब्द का पर्याय। –