ऐसे कुछ मामले हैं जहां आपको एक पीछे आने वाले रिटर्न प्रकार का उपयोग करना चाहिए। सबसे विशेष रूप से, एक लैम्ब्डा रिटर्न प्रकार, यदि निर्दिष्ट किया गया है, तो पीछे आने वाले रिटर्न प्रकार के माध्यम से निर्दिष्ट किया जाना चाहिए। इसके अलावा, यदि आपका रिटर्न प्रकार उपयोग करता है decltype
, जिसके लिए तर्क नाम के दायरे की आवश्यकता होती है, तो पीछे आने वाले रिटर्न प्रकार का उपयोग किया जाना चाहिए (हालांकि, कोई आमतौर पर declval<T>
इस उत्तरार्द्ध मुद्दे के आसपास काम करने के लिए उपयोग कर सकता है )।
अनुगामी वापसी प्रकार के कुछ अन्य मामूली फायदे हैं। उदाहरण के लिए, पारंपरिक फ़ंक्शन सिंटैक्स का उपयोग करके गैर-इनलाइन सदस्य फ़ंक्शन परिभाषा पर विचार करें:
struct my_awesome_type
{
typedef std::vector<int> integer_sequence;
integer_sequence get_integers() const;
};
my_awesome_type::integer_sequence my_awesome_type::get_integers() const
{
}
कक्षा के नाम के पहले प्रकट होने के बाद से सदस्य टाइप किए गए दायरे में नहीं हैं ::get_integers
, इसलिए हमें कक्षा की योग्यता को दो बार दोहराना होगा। यदि हम एक पीछे लौटने वाले प्रकार का उपयोग करते हैं, तो हमें टाइप का नाम दोहराने की आवश्यकता नहीं है:
auto my_awesome_type::get_integers() const -> integer_sequence
{
}
इस उदाहरण में, यह इतनी बड़ी बात नहीं है, लेकिन यदि आपके पास लंबे समय तक नाम या वर्ग टेम्पलेट के सदस्य फ़ंक्शन हैं जो इनलाइन को परिभाषित नहीं करते हैं, तो यह पठनीयता में बड़ा बदलाव ला सकता है।
C ++ Now 2012 में अपने "फ्रेश पेंट" सत्र में, एलिसडेयर मेरेडिथ ने कहा कि यदि आप लगातार रिटर्न प्रकार का उपयोग करते हैं, तो आपके सभी कार्यों के नाम बड़े करीने से हैं:
auto foo() -> int;
auto bar() -> really_long_typedef_name;
मैं में हर जगह वापसी प्रकार अनुगामी का उपयोग किया है CxxReflect , आप कैसे कोड दिखता है उन्हें लगातार उपयोग का एक उदाहरण के लिए देख रहे अगर ऐसा है, आप एक बार देख वहाँ (जैसे, ले जा सकते हैं वर्ग )।type
decltype
तर्कों पर है।