VLA (যেমন int arr[n]; যেখানে n রানটাইম ভেরিয়েবল) C++-এ স্ট্যান্ডার্ড নয় কারণ:
- স্ট্যাক ওভারফ্লো ঝুঁকি: বড় অ্যারে স্ট্যাক-এ বানালে প্রোগ্রাম ক্র্যাশ করতে পারে (স্ট্যাক সাইজ সীমিত)।
- টাইপ সিস্টেম জটিলতা: VLA সাপোর্টের জন্য টাইপ সিস্টেমে বড় পরিবর্তন দরকার (রানটাইম সাইজ টাইপ সিস্টেমে)।
- সুরক্ষা: কম্পাইল-টাইমে সাইজ জানা ন থাকলে বাউন্ড চেকিং এবং অপ্টিমাইজেশন কঠিন।
বিকল্প (সুপারিশকৃত): std::vector ব্যবহার করুন। এটি হিপ-এ মেমরি অ্যালোকেট করে, ডাইনামিক রিসাইজিং সাপোর্ট করে, এবং বাউন্ড চেকিং (at()) দিয়ে থাকে।
vector উদাহরণ
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
for(auto it = vec.begin(); it != vec.end(); ++it)
cout << *it << endl;
return 0;
}
আউটপুট
1 2 3
নোট: GCC/Clang এক্সটেনশন হিসেবে VLA সাপোর্ট করে (-pedantic দিলে ওয়ার্নিং দেয়)। কিন্তু পোর্টেবল কোডে ব্যবহার করা উচিত নয়।