না, C++ ভেরিয়েবল লেথ অ্যারে (VLA) সাপোর্্ট করে না। C++11 স্ট্যান্ডার্ড অনুযায়ী অ্যারের আকার একটি কনস্ট্যান্ট এক্সপ্রেশন (constant-expression) হতে হবে, অর্থাৎ কম্পাইল-টাইমে জানা থাকতে হবে।
যে কোডটি কাজ করবে না:
void displayArray(int n) {
int arr[n]; // ভেরিয়েবল লেথ অ্যারে - C++-এ অবৈধ
// ......
}
int main() {
displayArray(7);
}
কারণ: C99-এ VLA সাপোর্ট করা হয়েছিল, কিন্তু C++ স্ট্যান্ডার্ড কমিটি এটি গ্রহণ করেনি কারণ:
- স্টক ওভারফ্লো ঝুঁকি (রানটাইমে আকার বড় হলে)
- কম্পাইল-টাইম টাইপ সেফটি ভাঙে
- অবজেক্ট লাইফসাইকেল ম্যানেজমেন্ট জটিল হয়
C++-এ বিকল্পসমূহ:
- std::vector<int> vec(n); — ডাইনামিক আকার, হিপে অ্যালোকেশন, সুরক্ষিত।
- std::unique_ptr<int[]> ptr(new int[n]); — স্মার্ট পয়েন্টার, অটোমেটিক ক্লিনআপ।
- std::array<int, N> — কম্পাইল-টাইম ফিক্সড সাইজ, স্টকে অ্যালোকেটেড।
- new int[n] + delete[] — ম্যানুয়াল মেমরি ম্যানেজমেন্ট (প্রস্তাবিত নয়)।
নোট: কিছু কম্পাইলার (GCC, Clang) এক্সটেনশন হিসেবে VLA সাপোর্ট দেয় -std=gnu++17 মোডে, কিন্তু এটি পোর্টেবল নয় এবং এড়ানো উচিত।