首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 變長數組 (VLA):運行時確定數組大小的特性與移植性

     編輯:C++ 入門

C++ 變長數組 (VLA):運行時確定數組大小的特性與移植性

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];    // 函數返回值作為大小
    // ...
}

編譯器支持情況

關鍵限制

  1. 僅限局部變量:全局/靜態存儲期變量不支持 VLA
  2. 棧分配:大小受棧大小限制(通常 1-8MB),大數組會棧溢出
  3. 無法初始化:`int arr[n] = {0};` 非法
  4. sizeof 在運行時計算:`sizeof(arr)` 返回運行時大小
  5. C++11 起為可選特性:C11 標準將 VLA 設為可選,不保證移植性

錯誤示例

推薦做法


						
						
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
編譯器默認支持標準模式
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()棧分配、運行時大小非標準、危險、無構造/析構