তালিকা সূচনা ব্যবহারের সুবিধাগুলি সম্পর্কে ইতিমধ্যে দুর্দান্ত উত্তর রয়েছে, তবে আমার ব্যক্তিগত থাম্বের নিয়মটি যখনই সম্ভব সম্ভব কোঁকড়া ধনুর্বন্ধনী ব্যবহার করা নয়, পরিবর্তে এটি ধারণামূলক অর্থের উপর নির্ভরশীল করুন:
- যদি আমি অবজেক্টটি তৈরি করছি যা আমি কনস্ট্রাক্টরের (যেমন পাত্রে, পিওডি স্ট্রোকস, অ্যাটমিক্স, স্মার্ট পয়েন্টার ইত্যাদি) পাস করছি তার মানগুলি ধারণ করে, তবে আমি বন্ধনীগুলি ব্যবহার করছি।
- যদি কনস্ট্রাক্টর কোনও সাধারণ ফাংশন কলের অনুরূপ হয় (এটি কিছু বা কম জটিল ক্রিয়াকলাপগুলি সম্পাদন করে যা আর্গুমেন্টগুলির মাধ্যমে প্যারামেট্রাইজড হয়) তবে আমি সাধারণ ফাংশন কল সিনট্যাক্স ব্যবহার করছি।
- ডিফল্ট সূচনা করার জন্য আমি সর্বদা কোঁকড়ানো ধনুর্বন্ধনী ব্যবহার করি।
একটির জন্য, আমি সর্বদা নিশ্চিত যে অবজেক্টটি প্রাথমিকভাবে কোনও ডিফল্ট কনস্ট্রাক্টর সহ একটি "সত্য" শ্রেণি কিনা তা যেমন নির্বিশেষে বা একটি বিল্টিন / পিওডি টাইপ হবে তা নির্বিশেষে প্রারম্ভিক হয়ে ওঠে sure দ্বিতীয়টি হ'ল - বেশিরভাগ ক্ষেত্রে - প্রথম নিয়মের সাথে সামঞ্জস্যপূর্ণ, কোনও ডিফল্ট আরম্ভিকৃত অবজেক্ট প্রায়শই একটি "খালি" বস্তুর প্রতিনিধিত্ব করে।
আমার অভিজ্ঞতা অনুসারে, এই নিয়মটি ডিফল্টরূপে কোঁকড়া ধনুর্বন্ধনী ব্যবহারের চেয়ে অনেক বেশি ধারাবাহিকভাবে প্রয়োগ করা যেতে পারে, তবে সমস্ত ব্যতিক্রমগুলি স্পষ্টভাবে মনে রাখতে হবে যখন তারা ব্যবহার করা যায় না বা বন্ধনীর সাথে "স্বাভাবিক" ফাংশন-কল সিনট্যাক্সের চেয়ে আলাদা অর্থ থাকে (একটি ভিন্ন ওভারলোড কল করে)।
এটি উদাহরণস্বরূপ স্ট্যান্ডার্ড লাইব্রেরি-ধরণের সাথে পুরোপুরি ফিট করে std::vector
:
vector<int> a{10,20}; //Curly braces -> fills the vector with the arguments
vector<int> b(10,20); //Parentheses -> uses arguments to parametrize some functionality,
vector<int> c(it1,it2); //like filling the vector with 10 integers or copying a range.
vector<int> d{}; //empty braces -> default constructs vector, which is equivalent
//to a vector that is filled with zero elements
auto
করবেন না ?