मैं कम से कम प्राथमिक त्रुटि पहचान के साथ सी ++ iostream से बेस -10 (दशमलव) प्रतिनिधित्व में हस्ताक्षरित पूर्णांक पढ़ना चाहता हूं। मेरे विचार में, इस मामले में ऋण संकेत स्पष्ट रूप से एक त्रुटि होगी, क्योंकि हस्ताक्षरित पूर्णांक के पास कोई संकेत नहीं है। हालांकि, जीसीसी एक अलग राय है:हस्ताक्षर किए गए पूर्णांक पढ़ने पर नकारात्मक संख्याओं को पार्सिंग त्रुटियों के रूप में कैसे पहचानें?
#include <iostream>
#include <sstream>
int main() {
std::stringstream a("5"), b("-0"), c("-4");
unsigned int i;
a >> i; if (a) std::cout << i << std::endl; else std::cout << "Conversion failure" << std::endl;
b >> i; if (b) std::cout << i << std::endl; else std::cout << "Conversion failure" << std::endl;
c >> i; if (c) std::cout << i << std::endl; else std::cout << "Conversion failure" << std::endl;
return 0;
}
मुझे, अंतिम पंक्ति के लिए
4294967292
के उत्पादन देता है के रूप में अगर एक हस्ताक्षरित पूर्णांक -4 पढ़ा गया था और अहस्ताक्षरित int करने के लिए परिवर्तित।
Appearently, the GCC people see this as a feature। क्या कोई मानक है जो इस व्यवहार को अनिवार्य करता है, और क्या इससे बाहर निकलने के लिए स्वयं को पार्सर लिखने से कोई रास्ता कम है, यानी "-4" (और शायद "-0") को रूपांतरण त्रुटियों के रूप में पहचानें?
क्या आपने सही बग रिपोर्ट पोस्ट की थी? किसी भी प्रतिरोध के बिना उसे "निश्चित" चिह्नित किया जाता है। – spraff
@spraff: ऐसा लगता है, यह नकारात्मक संख्या व्यवहार का उल्लेख करता है। – thiton