Variable-Length Array (VLA) 允許在運行時確定數組大小,是 C99 引入的特性,但 C++ 標準不支持,僅作為編譯器擴展存在。
int main() {
int a = 5, b = 6;
int arr1[a]; // 變量作為大小
int arr2[min(a, b)]; // 表達式作為大小
int arr3[rand() % 10]; // 函數返回值作為大小
// ...
}
| 編譯器 | 默認支持 | 標準模式 |
|---|---|---|
| GCC (g++) | ✅ 是 | -std=c++11/14/17/20 仍支持(擴展) |
| Clang | ✅ 是 | 同 GCC |
| MSVC (VS) | ❌ 否 | 報錯:constant expression required |
| Intel ICC | ✅ 是 | 兼容 GCC |
| 方案 | 優點 | 缺點 |
std::vector<T> | 標準、安全、動態擴容、RAII | 堆分配、微小開銷 |
std::unique_ptr<T[]> | 智能指針、自動釋放 | 語法稍繁瑣 |
std::array<T, N> | 編譯期大小、棧分配、標準 | 大小必須為常量 |
alloca() | 棧分配、運行時大小 | 非標準、危險、無構造/析構 |