मैं विधि, अपरिवर्तित, और सी ++ में प्रतिलिपि के बिना पैरामीटर कैसे लौटा सकता हूं?मैं एक विधि, अपरिवर्तित, और सी ++ में एक प्रति के बिना एक अपरिवर्तनीय पैरामीटर कैसे वापस कर सकता हूं?
// This is more or less the desired signature from the caller's point of view
SomeImmutableObject ManipulateIfNecessary(SomeImmutableObject const& existingObject)
{
// Do some work…
// ...
if (manipulationIsNeccessary)
{
// Return a new object with new data etc (preferably without another copy)...
return SomeImmutableObject(...);
}
else
{
// Return the original object intact (but with no further copies!)...
return existingObject;
}
}
एक उदाहरण सी # के String.Trim तरीका है। सी # स्ट्रिंग्स अपरिवर्तनीय हैं और यदि ट्रिम को कोई काम नहीं करना है, तो मौजूदा स्ट्रिंग का संदर्भ वापस कर दिया जाता है, अन्यथा छंटनी की गई सामग्री के साथ एक नई स्ट्रिंग ऑब्जेक्ट लौटा दी जाती है।
मैं उपरोक्त विधि हस्ताक्षर के करीब कुछ दिए गए सी ++ में इस अर्थपूर्ण की नकल कैसे करूं?
"अन्यथा एक नई स्ट्रिंग ऑब्जेक्ट ..." तो फिर आप एक प्रतिलिपि से क्यों बचना चाहते हैं? –
संदर्भ द्वारा पास सी ++ में इसी तरह से काम करता है, सी ++ में समान कोड का उपयोग करने में क्या गलत है? –
यदि आप एनआरवीओ के बारे में बात कर रहे हैं, तो मुझे नहीं लगता कि यह यहां लागू है। –