কম্পিউটার টিউটোরিয়াল

C++-এ ভেরিয়েবল লেথ অ্যারে (VLA) সাপোর্ট করা হয় কি?

না, C++ ভেরিয়েবল লেথ অ্যারে (VLA) সাপোর্্ট করে না। C++11 স্ট্যান্ডার্ড অনুযায়ী অ্যারের আকার একটি কনস্ট্যান্ট এক্সপ্রেশন (constant-expression) হতে হবে, অর্থাৎ কম্পাইল-টাইমে জানা থাকতে হবে।

যে কোডটি কাজ করবে না:

void displayArray(int n) {
    int arr[n];  // ভেরিয়েবল লেথ অ্যারে - C++-এ অবৈধ
    // ......
}

int main() {
    displayArray(7);
}

কারণ: C99-এ VLA সাপোর্ট করা হয়েছিল, কিন্তু C++ স্ট্যান্ডার্ড কমিটি এটি গ্রহণ করেনি কারণ:

  • স্টক ওভারফ্লো ঝুঁকি (রানটাইমে আকার বড় হলে)
  • কম্পাইল-টাইম টাইপ সেফটি ভাঙে
  • অবজেক্ট লাইফসাইকেল ম্যানেজমেন্ট জটিল হয়

C++-এ বিকল্পসমূহ:

  1. std::vector<int> vec(n); — ডাইনামিক আকার, হিপে অ্যালোকেশন, সুরক্ষিত।
  2. std::unique_ptr<int[]> ptr(new int[n]); — স্মার্ট পয়েন্টার, অটোমেটিক ক্লিনআপ।
  3. std::array<int, N> — কম্পাইল-টাইম ফিক্সড সাইজ, স্টকে অ্যালোকেটেড।
  4. new int[n] + delete[] — ম্যানুয়াল মেমরি ম্যানেজমেন্ট (প্রস্তাবিত নয়)।
  5. নোট: কিছু কম্পাইলার (GCC, Clang) এক্সটেনশন হিসেবে VLA সাপোর্ট দেয় -std=gnu++17 মোডে, কিন্তু এটি পোর্টেবল নয় এবং এড়ানো উচিত।

  1. সি ও সি++-এ ভেরিয়েবল লেন্থ অ্যারে (VLA)

  2. সি ভাষায় ভেরিয়েবল লেন্থ আর্গুমেন্ট (Variadic Functions): stdarg.h ব্যবহার

  3. সি/সি++-তে মাল্টিডাইমেনশনাল অ্যারে (Multidimensional Arrays)

  4. C++-এ ভেরিয়েবল কীভাবে ডিক্লেয়ার করবেন?