एक कॉन्स वैल्यू क्यों लौटाएं? निम्नलिखित पर विचार करें (और कृपया ख़याल से बाहर चर नाम बहाना):
struct A { int a; };
A operator+(const A& a1, const A& a2)
{
A a3 = { a1.a + a2.a };
return a3;
}
operator+
की घोषणा को देखते हुए, मैं निम्नलिखित कर सकते हैं:
A a = {2}, b = {3}, c = {4}, d = ((a+b) = c);
यह सही है, मैं सिर्फ अस्थायी A
करने के लिए सौंपा है कि operator+
द्वारा वापस किया गया था। d.a
का परिणामी मान 4 है, 5 नहीं।operator+
से const A
के रिटर्न प्रकार को बदलने से इस असाइनमेंट को रोकता है, जिससे एक संकलक त्रुटि उत्पन्न करने के लिए (a+b) = c
अभिव्यक्ति उत्पन्न होती है।
यदि मैं किसी फ़ंक्शन से लौटाए गए पॉइंटर या पूर्णांक को असाइन करने का प्रयास करता हूं, तो मेरा कंपाइलर (एमएसवीसी) "बाएं ऑपरेंड एल-वैल्यू होना चाहिए" त्रुटि उत्पन्न करता है, जो एआरएम कंपाइलर के साथ संगत लगता है जो आपको बताता है कि सूचक अर्थहीन है - सूचक को वैसे भी असाइन नहीं किया जा सकता है। लेकिन कक्षाओं/structs के लिए, स्पष्ट रूप से गैर-कॉन्स रिटर्न मूल्यों को असाइन करना ठीक है।
आप किस कंपाइलर और संकलन झंडे का उपयोग कर रहे हैं? – Trent
आरवीसीटी 3.1 और मुझे नहीं पता कि निर्माण प्रणाली झंडे के झटके क्या हैं, हम केवल हमारे प्राणियों से छिपाए गए हैं – Dynite