return {};
"ফাংশনটির রিটার্ন টাইপের একটি অবজেক্ট খালি তালিকা-আরম্ভকারী দিয়ে সূচনা করে " নির্দেশ করে। সঠিক আচরণটি প্রত্যাবর্তিত অবজেক্টের ধরণের উপর নির্ভর করে।
Cppreferences.com থেকে (কারণ ওপিকে সি ++ 11 ট্যাগ করা হয়েছে, আমি সি ++ 14 এবং সি ++ 17 এ নিয়মগুলি বাদ দিয়েছি; আরও তথ্যের জন্য লিঙ্কটি দেখুন):
- যদি ব্রেসড-ডিআইএন-তালিকাটি খালি থাকে এবং টি ডিফল্ট কনস্ট্রাক্টর সহ শ্রেণীর ধরণের হয় তবে মান-আরম্ভকরণ সম্পাদিত হয়।
- অন্যথায়, যদি টি একটি সামগ্রিক প্রকার হয়, সমষ্টিগত সূচনা হয়।
- অন্যথায়, যদি টি স্টাড :: আরম্ভকারী_লিস্টের বিশেষীকরণ হয় তবে টি অবজেক্টটি ব্রেসড-আরআইএন-তালিকা থেকে প্রসঙ্গের উপর নির্ভর করে সরাসরি-সূচনা বা অনুলিপি-আরম্ভ হয়।
অন্যথায়, টি এর নির্মাতারা দুটি পর্যায়ে বিবেচনা করা হয়:
- সমস্ত কন্সট্রাক্টর যে স্ট্যান্ড :: ইনিশিয়াল_লিস্টকে একমাত্র আর্গুমেন্ট হিসাবে গ্রহণ করে বা প্রথম আর্গুমেন্ট হিসাবে যদি বাকী আর্গুমেন্টের ডিফল্ট মান থাকে তবে পরীক্ষা করা হয় এবং স্ট্র্যাড :: ইনিশিয়ালার_লিস্ট টাইপের একক যুক্তির বিপরীতে ওভারলোড রেজোলিউশনের সাথে মিলে যায়
- পূর্ববর্তী পর্যায়ে কোনও ম্যাচ তৈরি না হলে, টি এর সমস্ত নির্মাতারা কেবলমাত্র অ-সংকীর্ণ রূপান্তরগুলিকেই অনুমোদিত বলে সীমাবদ্ধতার সাথে ব্রেসড-থ্রি-তালিকার উপাদানগুলির সাথে যুক্তিগুলির সেটের বিরুদ্ধে ওভারলোড রেজোলিউশনে অংশ নেয়। যদি এই পর্যায়টি অনুলিপি-নির্ধারককে অনুলিপি-সূচনা-সূচনা করার জন্য সেরা ম্যাচ হিসাবে উত্পাদন করে, সংকলন ব্যর্থ হয় (দ্রষ্টব্য, সাধারণ অনুলিপি-সূচনাতে সুস্পষ্ট কনস্ট্রাক্টরগুলিকে মোটেই বিবেচনা করা হয় না)।
অন্যথায় (যদি টি শ্রেণীর ধরণের না হয়), যদি ব্রেসড-ডিআইআর-তালিকার কেবল একটি উপাদান থাকে এবং উভয়ই টি কোনও রেফারেন্স টাইপ না হয় বা একটি রেফারেন্স টাইপ যা উপাদানটির ধরণের সাথে সামঞ্জস্যপূর্ণ হয়, টি সরাসরি- সংক্ষিপ্ত রূপান্তর অনুমোদিত নয়, প্রাথমিকভাবে (প্রত্যক্ষ-তালিকা-সূচনাতে) বা কপি-ইনিশিয়ালাইজড (কপি-তালিকা-সূচনাতে) except
- অন্যথায়, যদি টি হল এমন একটি রেফারেন্স টাইপ যা উপাদানটির ধরণের সাথে সামঞ্জস্য না করে। (এটি যদি ব্যর্থ হয় যদি রেফারেন্সটি কোনও অবিশ্বাস্য লভ্যালু রেফারেন্স হয়)
- অন্যথায়, যদি ব্রেসড-ডিআইএন-তালিকার কোনও উপাদান না থাকে তবে টি মান-আরম্ভ হয়।
সি ++ 11 এর আগে একটি ফাংশন ফেরার জন্য std::string
, আপনি লিখেছেন:
std::string get_string() {
return std::string();
}
সি ++ 11 এ ব্রেস সিনট্যাক্স ব্যবহার করে, আপনাকে টাইপটি পুনরাবৃত্তি করতে হবে না:
std::string get_string() {
return {}; // an empty string is returned
}
return NULL
এবং return nullptr
যখন ফাংশনটি একটি পয়েন্টার প্রকারটি দেয় তখন ব্যবহার করা উচিত:
any_type* get_pointer() {
return nullptr;
}
তবে, NULL
সি ++ 11 সাল থেকে অবচিত হ'ল কারণ এটি একটি পূর্ণসংখ্যার মান (0) এর কেবলমাত্র একটি উপনাম, যখন nullptr
এটি একটি আসল পয়েন্টার প্রকার:
int get_int() {
return NULL; // will compile, NULL is an integer
}
int get_int() {
return nullptr; // error: nullptr is not an integer
}