编译错误:variable-sized object may not be initialized

//将int型vector拷贝给int数组
#include <iostream>
#include <vector>
#include <cstddef>
using namespace std;
int main()
{
    vector<int> ivec(5,2);
    const unsigned n=ivec.size();
    int iarr[n]={};
    size_t i=0;
    for(auto j:ivec)
    {
        iarr[i]=j;
        cout<<iarr[i]<<" ";
        i++;
    }
}

提示有语法错误,n明明是常量啊。。

int iarr[n]={};
编译器是有差异的,gcc可以支持,但是vc++不可以支持。
要么你用gcc(包括codeblock,devc++等基于它的开发工具)
要么按照vc++的写法,换成int *iarr = new int[n];

使用变量来定义数组长度时,这个数组可以定义,却不能同时进行初始化赋值,需要在之后赋值。
把大括号去了应该就不会报错了。
当然,编译器类型也会影响编译结果。

n是常量,可是被初始化于一个非常量(变量,也就是vector< int >::size()函数的返回值),那也是不行的。

n是常量,但不是常量表达式,只能在编译过程中获值,初始化数组维度的值必须是常量表达式