2013-08-16 2 views
6

हैलो मैं इस बात को समझने की कोशिश कर रहा हूं ..एक बार जब मैंने एक कॉन्स्ट के रूप में संदर्भ घोषित कर दिया है तो यह एक अलग प्रकार का डेटा ले सकता है?

कहें कि मेरे पास यह कोड है।

int a = 5; 
double& b = a; //Error. 

फिर एक बार मैं एक स्थिरांक संकलक अब शिकायत नहीं करता है के रूप में दूसरी पंक्ति की घोषणा की है।

const double& b = a; //Correct. 

क्या वास्तव में दृश्य, क्यों स्थिरांक समस्या हल के पीछे चल रहा है।

उत्तर

6

दृश्यों के पीछे क्या हो रहा है का एक अंतर्निहित रूपांतरण एक डबल है। एक अंतर्निहित रूपांतरण का नतीजा एक लवल्यू नहीं है, इसलिए इसका उपयोग गैर-कॉन्स संदर्भ को प्रारंभ करने के लिए नहीं किया जा सकता है।

+0

अच्छा जवाब, लेकिन क्या आप सामान्य रूप से सोचते हैं कि जो लोग इस बारे में पूछते हैं वे एक लवाल की परिभाषा जानते हैं? –

+0

@JohanLundberg, आम तौर पर लोगों को एक और SO सवाल मिल सकता है "lvalue क्या है" – RiaD

+0

यह एक अच्छा मुद्दा है। –

7

एक int को पहले double में परिवर्तित करने की आवश्यकता है। वह रूपांतरण एक अस्थायी अस्थायी पैदा करता है और ये गैर-कॉन्स के संदर्भों से जुड़ नहीं सकते हैं।

स्थिरांक का संदर्भ अस्थायी है कि अन्यथा अभिव्यक्ति उस में बनाया गया था के अंत में नष्ट हो जाएगा के जीवन का विस्तार होगा।

{ 
    int a = 0; 
    float f = a; // a temporary float is created here, its value is copied to 
       // f and then it dies 
    const double& d = a; // a temporary double is created here and is bound to 
         // the const-ref 
} // and here it dies together with d 

आप सोच रहे हैं कि क्या एक prvalue है, यहाँ एक है मूल्य श्रेणियों के बारे में अच्छा SO thread

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

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