Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ทำไม Variable-Length Arrays (VLA) ไม่อยู่ในมาตรฐาน C++


VLA (Variable-Length Arrays)** = array ที่ขนาดกำหนดได้ตอน runtime (ไม่ใช่ compile-time constant)

เหตุผลที่ไม่อยู่ในมาตรฐาน C++:

  • สร้าง array ใหญ่บน stack ได้ (stack มีพื้นที่จำกัด) → stack overflow risk
  • ต้องการการเปลี่ยนแปลงใหญ่โตใน type system ของ C++
  • C++ มีทางเลือกที่ดีกว่าและปลอดภัยกว่าแล้ว

ทางเลือกแทน VLA: std::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);
    vec.push_back(4);
    vec.push_back(5);
    for (auto it = vec.begin(); it != vec.end(); it++)
        cout << *it << endl;
    return 0;
}

ผลลัพธ์

1 2 3 4 5

std::vector จัดสรรบน heap ขยาย/หดได้อัตโนมัติ จัดการ memory ให้เอง ปลอดภัยกว่า VLA มาก