অটো এবং ডিক্লটাইপ বিভিন্ন উদ্দেশ্যে পরিবেশন করে যাতে তারা একে একে ম্যাপ না করে। auto হল C++11 এবং পরবর্তীতে একটি কীওয়ার্ড যা স্বয়ংক্রিয় টাইপ ডিডাকশনের জন্য ব্যবহৃত হয়। ডিক্লটাইপ টাইপ স্পেসিফায়ার একটি নির্দিষ্ট এক্সপ্রেশনের ধরন প্রদান করে। অটোর বিপরীতে যা ভেরিয়েবলে বরাদ্দ করা মানের উপর ভিত্তি করে প্রকারগুলি নির্ণয় করে, ডিক্লটাইপ এটিতে প্রেরিত একটি অভিব্যক্তি থেকে টাইপকে নির্ণয় করে। ডিক্লটাইপ দ্বারা প্রত্যাবর্তিত মান সরাসরি অন্য পরিবর্তনশীল সংজ্ঞায়িত করতে ব্যবহার করা যেতে পারে।
অটো টেমপ্লেট প্যারামিটার কাটানোর নিয়ম অনুসরণ করে। আপনি এই নিয়ম সম্পর্কে আরও পড়তে পারেন https://en.cppreference.com/w/cpp/language/template_argument_deduction
এযদিও decltype-এর নিয়ম আছে, এটা মানদণ্ডে সংজ্ঞায়িত করা উচিত। এখানে এই নিয়মগুলির সাথে স্ট্যান্ডার্ড থেকে একটি উদ্ধৃতি দেওয়া হল:
অপারেটরের আকারের মতোই, ডিক্লটাইপের অপারেন্ডের মূল্যায়ন করা হয়নি। অনানুষ্ঠানিকভাবে, decltype(e) দ্বারা প্রত্যাবর্তিত প্রকার নিম্নরূপ অনুমান করা হয় -
- যদি অভিব্যক্তি e স্থানীয় বা নেমস্পেস স্কোপের একটি ভেরিয়েবলকে বোঝায়, একটি স্ট্যাটিক সদস্য ভেরিয়েবল বা একটি ফাংশন প্যারামিটার, তাহলে ফলাফল হল ভেরিয়েবল বা প্যারামিটারের ঘোষিত প্রকার
- যদি e একটি ফাংশন কল বা একটি ওভারলোড অপারেটর আমন্ত্রণ হয়, decltype(e) সেই ফাংশনের ঘোষিত রিটার্ন প্রকারকে বোঝায়
- অন্যথায়, যদি e একটি lvalue হয়, decltype(e) হল T&, যেখানে T হল e-এর ধরন; যদি e একটি rvalue হয়, ফলাফল T
এই শব্দার্থবিদ্যাগুলি জেনেরিক লাইব্রেরি লেখকদের চাহিদা পূরণের জন্য ডিজাইন করা হয়েছিল, একই সময়ে নবীন প্রোগ্রামারদের জন্য স্বজ্ঞাত কারণ decltype-এর রিটার্ন টাইপ সর্বদা অবজেক্ট বা ফাংশনের প্রকারের সাথে হুবহু মেলে সোর্স কোড. আরও আনুষ্ঠানিকভাবে, নিয়ম 1 বন্ধনীবিহীন আইডি-অভিব্যক্তি এবং ক্লাস সদস্য অ্যাক্সেস এক্সপ্রেশনের ক্ষেত্রে প্রযোজ্য। ফাংশন কলের জন্য, ডিডিউড টাইপ হল স্ট্যাটিকভাবে নির্বাচিত ফাংশনের রিটার্ন টাইপ, যা ওভারলোড রেজোলিউশনের নিয়ম দ্বারা নির্ধারিত হয়।
উদাহরণ
অটো এবং ডিক্লটাইপ ব্যবহার করার উদাহরণ,
#include<iostream> #include<vector> using namespace std; int main() { // Using auto for type deduction vector<int> arr(10); for(auto it = arr.begin(); it != arr.end(); it ++) { cin >> *it; } // Using decltype for type deduction vector<int> arr(10); for (decltype(arr.begin()) it = arr.begin(); it != arr.end(); it++) { cin >> *it; } return 0; }
উল্লেখ্য যে decltype দ্বারা নির্দেশিত প্রকার স্বয়ংক্রিয় দ্বারা অনুমানকৃত প্রকার থেকে ভিন্ন হতে পারে৷ আপনি C++ - https://thbecker.net/articles/auto_and_decltype/section_01.html
-এ টাইপ ডিডাকশনের এই 12-পৃষ্ঠার ব্যাখ্যাটিতে এই সূক্ষ্ম পার্থক্যগুলি সম্পর্কে আরও পড়তে পারেন