संकलक सही है, आईएसओ सी ++ § 5.3.1.3 के अनुसार:
एकल & ऑपरेटर का परिणाम अपने संकार्य के लिए सूचक है। ऑपरेंड एक लेल्यू या योग्य-आईडी होगा।
दूसरे शब्दों में, आप कुछ भी एक नाम है कि के एक पते ले सकते हैं।
मान कार्यों से लौटे दर-मूल्य कोई नाम नहीं है और अक्सर एक रजिस्टर के माध्यम से चुना जाता है। तो स्मृति में रहने वाले मूल्य के बारे में बात करने के लिए "पता" कोई बात नहीं है!
कोई तर्क दे सकता है कि संकलक स्मार्ट हो सकता है, इसका पता लगा सकता है और उस अभिव्यक्ति की अवधि के लिए स्टैक पर मूल्य संग्रहीत कर सकता है जिसमें पता उपयोग किया जाता है।लेकिन यह त्रुटि-प्रवण है (आप अभिव्यक्ति के बाहर एक पॉइंटर "रिसाव" कर सकते हैं), और मानक के एक्सटेंशन स्पष्ट रूप से (यानी संगत होने की गारंटी नहीं है) होगा। इसलिए एमएसवीसी बस इसे प्रतिबंधित करता है।
मनोरंजक रूप से, संकलक is that smart जब यह संदर्भ पर एक रावल्यू के लिए आता है। लेकिन पॉइंटर के लिए एक रैल्यू के लिए ऐसी कोई कार्यक्षमता नहीं है।
अपने प्रश्न का उत्तर देने के लिए: सामानों के पते को कम करने का प्रयास करें; एक चर का पता लेना अनुकूलक को इसे एक रजिस्टर में रखने से रोकता है। लेकिन तुम, बजाय एक संदर्भ वापस जाने के लिए है, तो:
class a {
private:
int dummy;
public:
int get_dummy() const {
return dummy;
}
int& get_dummy() {
return dummy;
}
};
int main()
{
a aa;
int* me = &(aa.get_dummy());
}
ध्यान दें कि एक const get_dummy()
होने सख्ती की जरूरत नहीं है, लेकिन rvalue संदर्भों में अनुकूलक में मदद मिलेगी।
सूचक के लिए एक संदर्भ वापस करें। –
["एल-वैल्यू आवश्यक" त्रुटि का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/1353384/l-value-required-error) – sigy