मैं हमेशा सिखाया गया है कि गैर आदिम प्रकार स्थिरांक संदर्भ के बजाय मूल्य द्वारा पारित किया जाना चाहिए जहां संभव हो, अर्थात्:क्या छोटे सरल structs को संदर्भ संदर्भ से पारित किया जाना चाहिए?
void foo(std::string str);//bad
void foo(const std::string &str);//good
लेकिन मैं आज सोच रहा था कि शायद वास्तव में कुछ सरल उपयोगकर्ता परिभाषित प्रकार वास्तव में हो सकता है बेहतर मूल्य जैसे द्वारा पारित:
class Vector2
{
public:
float x, y;
...constructors, operators overloads, utility methods, etc...
};
void foo(Vector2 pos);
void foo(const Vector2 &pos);//is this really better than by value?
void foo(float x, float y);//after all isn't by value effectively doing this?
मेरे विचार आने लगे कि संदर्भ से Vector2 पास करके, यह संकलक के बाद से मूल्य से गुजर अब एक सूचक उपयोग कर रहा है और स्थिरांक Vector2 & स्थिति तक पहुँचने के लिए dereferencing से वास्तव में और अधिक महंगा है संस्करण?
क्या यह मामला है? क्या सरल वस्तुएं मूल्य से गुजरती हैं? रेखा को कहाँ खींचा जाना चाहिए?
ध्यान दें कि यदि आपके क्लास-प्रकार में उपयोगकर्ता द्वारा घोषित कन्स्ट्रक्टर हैं, तो यह पीओडी नहीं है। –
अंगूठे का सामान्य नियम: कॉन्स्ट-रेफरेंस द्वारा पास, जब तक कि 'आकार (टी) <= आकार (शून्य *) 'या' टी' आदिम नहीं है। – GManNickG
@GMan, आपने मुझे इसे हराया (और +1)। हालांकि, मैं प्रोसेसर के शब्द-आकार से कम या उसके बराबर सामान्यीकृत करना चाहता हूं। और, इष्टतम आकार को खोजने के लिए प्रोसेसर चश्मे की जांच करनी चाहिए। अगर मुझे गलत नहीं लगता है, तो आकार के बावजूद, कंपाइलर्स कुछ मामलों में मूल्य से पास के पास एक कॉन्स रेफरी को संभावित रूप से अनुकूलित कर सकते हैं। मुझे लगता है कि यह विशेष रूप से सी ++ 0x में नया कदम अर्थशास्त्र दिया गया है। –