C++ স্ট্যান্ডার্ড কমিটি প্রতি তিন বছর পর পর নতুন ফিচার পাঠানোর দিকে মনোযোগ দেয়। স্পেসিফিকেশনের দুটি প্রধান অংশ হল প্রোগ্রামিং ভাষার মূল কার্যকারিতা এবং স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি (STL)। কোডটিকে পরিষ্কার, সহজ এবং কমপ্যাক্ট করতে নতুন বৈশিষ্ট্যগুলি চালু করা হয়েছে৷ নিম্নলিখিত বৈশিষ্ট্যগুলির তালিকা রয়েছে যা চালু করা হয়েছে-:
1. ভাঁজ অভিব্যক্তি
ফোল্ড এক্সপ্রেশনগুলি একটি পরিবর্তনশীল সংখ্যক আর্গুমেন্টের জন্য ছোট কোড লিখতে ব্যবহৃত হয় যা একটি ফাংশনে পাস করা যেতে পারে বা ফাংশন থেকে ফেরত দেওয়া যেতে পারে। এটি আর্গুমেন্ট হিসাবে এবং একটি ফাংশনের রিটার্ন স্টেটমেন্ট হিসাবে যেকোন সংখ্যক ভেরিয়েবল ব্যবহার করতে সক্ষম করে।
সিনট্যাক্স:-
-
ইউনারি ডান ভাঁজ - ( প্যাক op1 ... )৷
-
ইউনারি বাম ভাঁজ - ( … op1 প্যাক)
-
বাইনারি বাম ভাঁজ - ( init op1 … op1 pack )
-
বাইনারি ডান ভাঁজ - ( প্যাক op1 … op1 init )
এখানে প্যাক করুন একটি প্যারামিটার প্যাক যা যেকোন সংখ্যক ভেরিয়েবলের জন্য প্রসারিত করা যেতে পারে। op1 একজন অপারেটর। (-, + , <=,>=, <,> , ==, *, /….)। বাইনারি ভাঁজে, উভয় op1 একই অপারেটর।
init একটি অভিব্যক্তি যা প্রসারিত করা যায় না৷
উদাহরণ
#include <iostream> #include <string> using namespace std; template<typename ...Args> auto addition(Args ...args){ return (args + ... + 0); } template<typename ...Args> auto sum2(Args ...args){ return (args + ...); } int main(){ cout << "Sum is : "<<addition(1,1,1,1,1) << endl; cout << "Sum 2 is : "<<addition ( 1,2,3); }
আউটপুট
Sum is : 5 Sum 2 is : 6
2. স্ট্রাকচার বাইন্ডিং
এগুলি একাধিক ভেরিয়েবলকে একটি জোড়া, টিপল ইত্যাদির মান সহ শুরু করার জন্য ব্যবহার করা হয়। এই সমস্ত ভেরিয়েবলের বাঁধাই ইনিশিয়ালাইজারগুলির সাথে একটি একক বিবৃতিতে করা হয়।
-
কেস 1:- একটি অ্যারে বাঁধাই
শনাক্তকারী তালিকার প্রতিটি শনাক্তকারী অ্যারের উপাদানের জন্য lvalue-এর নাম হয়ে যায়। উপাদানের সংখ্যা অবশ্যই শনাক্তকারীর সংখ্যার সমান হতে হবে।
int arry[3] ={ 3,4,5 };
স্বয়ংক্রিয় [a,b,c] =arry;
//এখানে অ্যারে তৈরি করা হয়েছে এবং একটি 3 বোঝায়, b 4 এবং c বোঝায় 5।
-
কেস 2:- টাইপের মতো একটি টিপল বাঁধাই
float fnum{};
char ch1{};
int নম্বর{};
std::tuple
tplex( fnum, std::move(ch1) , number); const auto&[ p, q, r] =tplex;
// p হল স্ট্রাকচার্ড বাইন্ডিং এর নাম যা fnum কে উল্লেখ করে
// q হল স্ট্রাকচার্ড বাইন্ডিং এর নাম যা ch1
কে উল্লেখ করে// r হল স্ট্রাকচার্ড বাইন্ডিং এর নাম যা সংখ্যা উল্লেখ করে
-
কেস 3:- ডেটা সদস্যদের জন্য বাধ্যতামূলক
structVar {
পরিবর্তনযোগ্য int num1 :2;
উদ্বায়ী ডবল num2;
};
structVar func();
const auto [ a, b] =func();
// a হল 2-বিট বিট ফিল্ডের জন্য একটি int lvalue
// b হল একটি const volatile double lvalue
3. ডাইরেক্ট লিস্ট
ব্যবহার করে enums শুরু করাC++17 এর সাহায্যে এনামগুলি এখন ব্রেস ব্যবহার করে শুরু করা যেতে পারে।
সিনট্যাক্স:-
enum byte : unsigned char {}; byte b0 {0}; // OK byte b1 = byte{1}; // OK byte b2 = byte{256}; // ERROR - 0 to 255 only
4. If এবং Switch এর ভিতরে পরিবর্তনশীল ঘোষণা
C++17 যদি ভেরিয়েবলের ভিতরে ইফ এবং সুইচ কন্ডিশন ঘোষণা করতে দেয়। এটি একই নামের সাথে ভেরিয়েবল ব্যবহার করা সহজ করে তোলে যার বিভিন্ন সুযোগ রয়েছে।
সিনট্যাক্স:-
if (data type variable condition) { //statements } switch ( condition; variable ) { //statements }
5. যদি constexpr বিবৃতি
টেমপ্লেট কোডের জন্য দরকারী বৈশিষ্ট্য. কম্পাইলের সময় if constexpr স্টেটমেন্ট মূল্যায়ন করা হয়।
এটা কেমন
নিচের তুলনা ব্যবহার করে সহায়ক দেখানো যেতে পারে:-
সাধারণ যদি অন্যথায় বিবৃতি:-
int var = 10; if (var >= 10) { var=var+10; } else { var=var-10; }
Constexpr If-else স্টেটমেন্ট:-
template <typename T> auto length ( T const& value ) { //checking if T is integer or not if (is_integral<T>::value) { return value; } else { return value.length(); } }
6. নেস্টেড নেমস্পেস
নেমস্পেসগুলি ক্লাস এবং ফাংশনগুলির মতো অনুরূপ কোডগুলিকে একত্রিত করতে ব্যবহৃত হয় যা পারস্পরিক সম্পর্কযুক্ত। C++17 নেস্টেড নেমস্পেস ব্যবহার করার আরও সহজ সিনট্যাক্সের অনুমতি দেয়। আগে সিনট্যাক্স বেশ অগোছালো ছিল যখন নেস্টেড নেমস্পেসের সংখ্যা বেশি ছিল। ধনুর্বন্ধনী হ্যান্ডলিং এখন আর প্রয়োজন নেই৷
৷C++17 এর আগে:-
namespace Earth{ namespace Continent { namespace Country { class City { .......... }; } } }
নতুন সিনট্যাক্স:-
namespace Earth :: Continent :: Country { class City { .......... }; }