首页 > 解决方案 > C ++ 11中的可变长度数组

问题描述

我知道有几个关于可变长度数组(VLA)的问题。我认为一般结论是不支持 VLA。但是下面的代码会编译得很好。任何人都可以解释一下吗?

#include <iostream>
#include <vector>

using namespace std;

void func(vector<int> v){
    int arr[v.size()] = {0};
    int b = 4;
    return;
}

void func2(int n)
{
    int arr[n];
}

int main()
{
  vector<int> v = {1,2,3};
  func(v);
  func2(10);
  int len = 8;
  int arr[len] = {0};
  return 0;
}

标签: arraysc++11initialization

解决方案


它使用编译器 g++ 4.8.4 和 C++11 显示错误消息“可变大小的对象可能未初始化”。

一些编译器部分支持这种数组定义作为扩展。请参阅此链接。但是,它不是 C++ 标准。

当你在堆栈内存上分配一个数组时,你必须在编译时声明它的长度。如果你想要一个可变长度的数组,你必须在堆内存上分配它。


推荐阅读