কিছু নির্দিষ্ট ক্ষেত্রে রয়েছে যেখানে আপনাকে অবশ্যই অনুসরণীয় রিটার্ন টাইপ ব্যবহার করতে হবে। উল্লেখযোগ্যভাবে, একটি ল্যাম্বদা রিটার্ন টাইপ, যদি নির্দিষ্ট করা থাকে তবে অবশ্যই একটি ট্রিলিং রিটার্ন টাইপের মাধ্যমে নির্দিষ্ট করা আবশ্যক। এছাড়াও, যদি আপনার রিটার্ন টাইপ decltype
এমন একটি ব্যবহার করে যাতে আর্গুমেন্টের নাম সুযোগের প্রয়োজন হয় তবে একটি পিছনের রিটার্ন টাইপ ব্যবহার করা আবশ্যক (তবে, declval<T>
এই সমস্যাটি প্রায়শই ব্যবহার করতে পারেন কেউ সাধারণত )।
পেছনের রিটার্ন টাইপের কিছু অন্যান্য ছোট ছোট সুবিধা রয়েছে। উদাহরণস্বরূপ, functionতিহ্যবাহী ফাংশন সিনট্যাক্স ব্যবহার করে একটি অন-ইনলাইন সদস্য ফাংশন সংজ্ঞা বিবেচনা করুন:
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
{
}
এই উদাহরণে, এটি এত বড় ব্যাপার নয়, তবে আপনার যদি দীর্ঘ শ্রেণীর নাম বা শ্রেণি টেম্পলেটগুলির সদস্য ফাংশনগুলি থাকে যা ইনলাইন সংজ্ঞায়িত হয় না, তবে এটি পঠনযোগ্যতায় একটি বড় পার্থক্য করতে পারে।
সি ++ নাও ২০১২-তে তাঁর "ফ্রেশ পেইন্ট" অধিবেশনটিতে অ্যালিসডায়ার মেরেডিথ উল্লেখ করেছিলেন যে আপনি যদি ধারাবাহিকভাবে রিটার্নের ধরণগুলি ব্যবহার করেন তবে আপনার সমস্ত ফাংশনের নাম ঝরঝরে রয়েছে:
auto foo() -> int;
auto bar() -> really_long_typedef_name;
আমি সর্বত্র আগমন ধরনের trailing ব্যবহার করেছি CxxReflect , কেমন কোড সৌন্দর্য তাদের ধারাবাহিকভাবে ব্যবহার একটি উদাহরণ খুঁজছেন তাই যদি, আপনি একটি বর্ণন সেখানে (যেমন, গ্রহণ করতে পারেন বর্গ )।type
decltype
তর্ক করার জন্য।