C++-এ inline কীওয়ার্ড ফাংশনের জন্য ব্যবহৃত হতো। C++17-এ ইনলাইন ভেরিয়েবল কনসেপ্ট আনা হয়েছে।
ইনলাইন ভেরিয়েবল একাধিক ট্রান্সলেশন ইউনিটে ডিফাইন করা যেতে পারে। এটি One Definition Rule (ODR) মেনে চলে। যদি একাধিকবার ডিফাইন করা হয়, তবে কম্পাইলার সেগুলো মার্জ করে ফাইনাল প্রোগ্রামে একটি অবজেক্ট বানায়।
C++17 এর আগে: স্ট্যাটিক মেম্বার ইনিশিয়ালাইজেশন
পূর্বে ক্লাসের ভেতরে সরাসরি স্ট্যাটিক ভেরিয়েবল ইনিশিয়ালাইজ করা যেত না। ক্লাসের বাইরে ডিফাইন করতে হতো।
উদাহরণ কোড (পুরানো পদ্ধতি)
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() { ++num; }
~MyClass() { --num; }
static int num;
};
int MyClass::num = 10; // ক্লাসের বাইরে ডিফাইন
int main() {
cout << "The static value is: " << MyClass::num;
return 0;
}
আউটপুট
The static value is: 10
C++17-এ: ইনলাইন স্ট্যাটিক ভেরিয়েবল
এখন ক্লাসের ভেতরেই inline static ব্যবহার করে ইনিশিয়ালাইজ করা যায়।
উদাহরণ কোড (C++17)
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() { ++num; }
~MyClass() { --num; }
inline static int num = 10; // ক্লাসের ভেতরে ইনিশিয়ালাইজেশন
};
int main() {
cout << "The static value is: " << MyClass::num;
return 0;
}
আউটপুট
The static value is: 10
লाभ: হেডার-অনলি লাইব্রেরি লিখতে সুবিধা হয়, আলাদা সোর্স ফাইল প্রয়োজন নেই।