C ++声明具有size函数的2d数组

时间:2017-05-22 20:36:24

标签: c++ arrays

我正在尝试使用stL map的size()方法声明一个二维数组:

const int size = edge_map.size();//get row and column size

int a[size][size];//nxn matrix

我不断收到一个编译器错误,即大小必须是一个常量值,即使我将它声明为常量。没有必要使用动态二维数组,有没有解决这个问题?

2 个答案:

答案 0 :(得分:3)

只要可以在编译时确定变量的值,数组的静态内存分配就可以接受变量。这个要求的原因是因为编译器必须知道为堆栈上的数组分配多少内存。如果edge_map听起来像(某种容器可以在其存在的整个过程中改变大小),那么你就无法这样做。

如果不是这种情况,并且edge_map.size()具有可在编译时确定的返回值,则将该函数标记为constexpr应该允许此代码工作。

答案 1 :(得分:1)

const表示不更改其原始(初始)值。

编译时必须知道size ,因为编译器/链接器为非局部变量分配内存(从任何函数声明)。