2009-07-21 9 views
5

क्या होता है यदि मैं एक int को डबल डालता हूं, लेकिन डबल का मान सीमा से बाहर है?क्या होता है यदि मैं एक int को डबल डालता हूं, लेकिन डबल का मान सीमा से बाहर है?

आइए कहें कि मैं ऐसा कुछ करता हूं?

double d = double(INT_MIN) - 10000.0; 
int a = (int)d; 

एक का मूल्य क्या है? क्या यह अनिर्धारित है?

उत्तर

19

सटीक रूप से। मानक से उद्धरण, 4.9, "व्यवहार को अपरिभाषित किया गया है यदि गंतव्य प्रकार में छंटनी मूल्य का प्रतिनिधित्व नहीं किया जा सकता है।"

4

डेविड थॉर्नले ने इस प्रश्न का पूरी तरह उत्तर दिया। हालांकि आपके कोड में इस स्थिति से निपटने के लिए आपको boost's numeric_cast पर विचार करना चाहिए।

double d = double(INT_MIN) - 10000.0; 
int a = boost::numeric_cast<int>(d); 

इस क्रम में एक अपवाद फेंक देंगे अगर d एक int के लिए बहुत बड़ा है।

संबंधित मुद्दे