C++-এ inline কীওয়ার্ড ফাংশন, ভেরিয়েবল (C++17), নেমস্পেস (C++20) - সব জায়গায় ব্যবহৃত হয়। ফাংশনের জন্য এটি কম্পাইলারকে সাজেশন দেয় যে ফাংশন বডি কল সাইটে কপি করে দাও (ইনলাইন এক্সপ্যানশন)।
ইনলাইন ফাংশন
- ফাংশন কল ওভারহেড কমাতে (পুশ/পপ রেজিস্টার, জাম্প) ইনলাইনিং করা হয়।
- কম্পাইলার বাধ্য নয় ইনলাইন করার জন্য (হিন্ট মাত্র)।
- বড় ফাংশন, রিকার্সিভ ফাংশন, ভার্চুয়াল ফাংশন সাধারণত ইনলাইন হয় না।
- হেডার ফাইলে ডিফাইন করা ফাংশন ইমপ্লিসিটলি ইনলাইন।
উদাহরণ
#include <iostream>
using namespace std;
inline int Max(int x, int y) {
return (x > y) ? x : y;
}
int main() {
cout << "Max(20,10): " << Max(20,10) << endl;
cout << "Max(0,200): " << Max(0,200) << endl;
cout << "Max(100,1010): " << Max(100,1010) << endl;
return 0;
}
আউটপুট
Max(20,10): 20 Max(0,200): 200 Max(100,1010): 1010
কখন ব্যবহার করবেন?
- ছোট, ঘনিস্ট কল হওয়া ফাংশন (গেটার, সেটার, ম্যাথ ইউটিলিটি)।
- হেডার-অনলি লাইব্রেরি-এ (ODR ভাঙলেই না)।
- টেমপ্লেট ফাংশন (অবশ্যই হেডারে ডিফাইন করতে হয়, ইমপ্লিসিট ইনলাইন)।
কখন এড়াবেন?
- বড় ফাংশন (কোড বloat বাড়ায়, ইন্সট্রাকশন ক্যাশ মিস বেড়ায়)।
- ডিবাগিং-এ ব্রেকপয়েন্ট সেট করা কঠিন হয়।
- এবিআই (ABI) স্টেবিলিটি দরকার হলে (শেয়ার্ড লাইব্রেরি) - ইনলাইন পরিবর্তন করলে রিকম্পাইল লাগে।
C++17/20: inline variable, inline namespace - একাধিক TU-তে ডেফিনিশন অ্যালাউ।