2012-10-02 17 views
9

असाइन करने के लिए वापस किया गया है, सी ++ में, फ़ंक्शन के लौटाए गए मान को असाइन करने के लिए कोई तरीका है? यानी अगर मैं एक सदस्य समारोह fooबल को ऑब्जेक्ट को

class myClass{ 
    ... 
    public: 
    T1 foo(T2 x){T1 y; /*something*/ return y;}; 
} 

जो मैं के रूप में

myClass obj; 
T1 a = obj.foo(x); //<-- 

मैं सरल कॉल

myClass obj; 
obj.foo(x); //<-- 

कर सकते हैं मुख्य() में कॉल कर सकते हैं (जो ऐसा नहीं करता है वापस मूल्य को स्टोर करें) किसी भी तरह से "अवैध"?

वैकल्पिक रूप से, मैं

T1 a = obj.foo(x); 
obj.foo(x); 

की परिभाषा अलग कर सकते हैं मेरी अज्ञानता

+1

वापसी मूल्यों को छोड़ने के साथ विशेष रूप से कुछ भी गलत नहीं है। इसके अलावा, यहां तक ​​कि अगर ऐसा कोई तरीका था - 'somefunc (obj.foo (x))' के बारे में क्या? – Cubic

+0

आप इसे प्राप्त करने की कोशिश कर रहे हैं जो यह आवश्यक बनाता है? –

उत्तर

3

नहीं के लिए अपने समय के लिए धन्यवाद और खेद, वहाँ एक लौटे वस्तु पर एक ऑपरेशन के लिए मजबूर करने के लिए कोई रास्ता नहीं है।

और नहीं, तुम भेद नहीं कर सकते

T1 a = obj.foo(x); 
obj.foo(x); 
कॉल अंदर

के बीच (कम से कम नहीं एक पोर्टेबल, मानक तरीके से। आप कॉल-के ढेर और इस तरह के साथ भाग हैक कर सकता है, लेकिन आप क्यों करेंगे) ।

2

बताने का कोई तरीका नहीं है, लेकिन अच्छे मूल्य विश्लेषण विश्लेषण अक्सर चेतावनियां दिखाते हैं यदि वापसी मूल्यों को अनदेखा किया जाता है। मैं जो एमएसवीसी -2010 के साथ आता हूं वह निश्चित रूप से करता है।

3

सरल उत्तर नहीं है; हालांकि आप इसे "मजबूर कर सकते हैं":

स्मार्ट पॉइंटर लौटाएं जो किसी भी संदर्भ में स्वचालित रूप से नष्ट हो जाता है। विनाशक में कुछ अपवाद फेंक दें या एक जोर दें() कॉल करें। सही ढंग से उपयोग किए जाने पर दुर्घटना को रोकने के लिए, आप उस वर्ग में कुछ चर का उपयोग कर सकते हैं और इसे गलत पर सेट कर सकते हैं जब आपको यकीन है कि आपको ऑब्जेक्ट की आवश्यकता नहीं है और यह विनाशक को कुछ भी फेंकने को नहीं बताएगा।

+2

यह तंत्र अच्छा है, लेकिन निश्चित रूप से "रन-टाइम" चेक का एक प्रकार है। आपको बहुत धन्यवाद बीटीडब्ल्यू। – Acorbe

7

आप जी ++ का उपयोग कर रहे हैं, तो आप इस्तेमाल कर सकते हैं, हालांकि, नहीं एक त्रुटि

T1 foo(T2 x) __attribute__ ((warn_unused_result)); 

यह एक चेतावनी का परिणाम देगा। लेकिन आप इसे किसी त्रुटि में बदलने के लिए शायद कुछ -Werror = * ध्वज का उपयोग कर सकते हैं। सभी समर्थित फ़ंक्शन विशेषताओं के लिए here देखें।

+0

यह मेरी जरूरत के करीब है। हालांकि मैं थोड़ा अन-पोर्टेबल हो सकता हूं। मैं इस तरह से पता लगाऊंगा btw। धन्यवाद। – Acorbe

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