std::initializer_list
মূল ভাষা অন্তর্নির্মিত নয় কেন ?
এটি আমার কাছে মনে হচ্ছে এটি সি ++ 11 এর বেশ গুরুত্বপূর্ণ একটি বৈশিষ্ট্য এবং এখনও এটির নিজস্ব সংরক্ষিত কীওয়ার্ড নেই (বা এর মতো কিছু)।
পরিবর্তে, initializer_list
এটি স্ট্যান্ডার্ড লাইব্রেরি থেকে কেবলমাত্র একটি টেম্পলেট শ্রেণীর নতুন সংযোজক দ্বারা পরিচালিত নতুন ব্রেসড-ডিআইডি-তালিকা সিনট্যাক্স থেকে একটি বিশেষ, অন্তর্নিহিত ম্যাপিং রয়েছে । {...}
প্রথম ভাবা, এই সমাধানটি বেশ হ্যাকি ।
সি ++ ভাষাতে এখন নতুন সংযোজনগুলি কীভাবে প্রয়োগ করা হবে: কিছু টেম্পলেট শ্রেণীর অন্তর্নিহিত ভূমিকা দ্বারা এবং মূল ভাষার দ্বারা নয় ?
দয়া করে এই উদাহরণগুলি বিবেচনা করুন:
widget<int> w = {1,2,3}; //this is how we want to use a class
কেন নতুন ক্লাস বেছে নেওয়া হয়েছিল:
widget( std::initializer_list<T> init )
এর পরিবর্তে এগুলির কোনও ধারণার অনুরূপ কিছু ব্যবহার করার জন্য:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- একটি ক্লাসিক অ্যারে, আপনি সম্ভবত
const
এখানে এবং সেখানে যোগ করতে পারেন - তিনটি বিন্দু ভাষাতে ইতিমধ্যে বিদ্যমান (ভের-আরগস, এখন বৈকল্পিক টেম্পলেট) কেন সিনট্যাক্সটি পুনরায় ব্যবহার করবেন না (এবং এটিকে অন্তর্নির্মিত বোধ করছেন )
- কেবল একটি বিদ্যমান পাত্রে, যোগ করতে পারে
const
এবং&
এঁরা সকলেই ইতিমধ্যে ভাষার একটি অঙ্গ। আমি কেবল আমার 3 টি প্রথম ধারণা লিখেছি, আমি নিশ্চিত যে আরও অনেকগুলি পন্থা রয়েছে।