यह शैली का विषय है।गूगल (Google C++ style guidelines देखें), निम्न प्राथमिकता दी जाएगी:
bool CalculateSomeValue(
const vector<string>& input, map<string, double>* result);
इसका कारण यह है एक सूचक का उपयोग कर कॉल स्थल पर एक ampersand का स्पष्ट उपयोग की आवश्यकता है: जैसा कि जिस तरह से करने के लिए विरोध
CalculateSomeValue(input, &result);
यह एक संदर्भ प्रकार के साथ लागू किया जाएगा:
CalculateSomeValue(input, result);
मामलों में एक ampersand जहां पैरामीटर संशोधित कर रहे हैं के उपयोग के लिए मजबूर कर रहा करके, यह कॉल स्थल पर स्पष्ट है क्या ज होगा Appen। संदर्भों का उपयोग करते समय, प्रत्येक इनपुट के लिए प्रलेखन को देखना आवश्यक हो जाता है ताकि यह पता चल सके कि इसमें इसके इनपुट पैरामीटर को संशोधित करने की क्षमता है या नहीं।
हालांकि, एक सूचक का उपयोग इसके डाउनसाइड्स भी है। विशेष रूप से, पॉइंटर का उपयोग करने का अर्थ है कि आप कॉलर से नल को संभालने की ज़िम्मेदारी बदलते हैं जहां पॉइंटर को संदर्भित किया जाएगा (यदि परिवर्तक एक सूचक है और न केवल स्थानीय चर के साथ अभिव्यक्ति का पता है)। यही है, जब एक सूचक प्रकार का उपयोग करते हैं, CalculateSomeValue
को nullptr
(या स्पष्ट रूप से दस्तावेज़ की आवश्यकता है कि उसे कॉलर में इस जांच की आवश्यकता है) की जांच करने की आवश्यकता है, जबकि संदर्भ प्रकार का उपयोग स्वयं-दस्तावेज है और स्पष्ट रूप से इंगित करता है कि एक गैर-शून्य संदर्भ की उम्मीद है।
इस विशेष situtation के लिए, मैं व्यक्तिगत रूप से अत्यधिक एक संकर दृष्टिकोण की सिफारिश:
bool CalculateSomeValue(
const std::vector<std::string>& input,
Output<map<string, double>> result);
... जहां Output<T>
हस्ताक्षर के साथ एक समारोह द्वारा बनाई गई है:
template<typename T> Output<T> WriteTo(T& output_ref);
... और जहां Output<T>
ओवरलोड ऑपरेटर ->
, *
, आदि। यह मूल रूप से कॉल साइटों को इस तथ्य में स्पष्ट करने के लिए मजबूर करता है कि इनपुट को आवश्यकतानुसार उत्परिवर्तित किया जाएगा:
CalculateSomeValue(input, WriteTo(result));
... करने के लिए विरोध के रूप में:
CalculateSomeValue(input, result);
... जबकि एक साथ संदर्भ की गैर-शून्य अर्थ विज्ञान/वाक्य रचना प्राप्त कर रहा।
एक संदर्भ के लिए एक सूचक? यह दिलचस्प है ... @ user619237: StackOverflow पर 'पॉइंटर्स बनाम संदर्भों' की खोज करें और आपको कभी भी वांछित उत्तर मिलेगा। :] – Mehrdad
http://stackoverflow.com/questions/114180/pointer-vs-reference – sinek
आपको खोज करने की भी आवश्यकता नहीं है, बस "संबंधित" अनुभाग पर दाईं ओर एक नज़र डालें :) – sinek