C++中数组允许的最大维数是多少?

Mes*_*sop 19 c++ multidimensional-array

您可以声明一个包含10个元素的非常简单的数组,并以这种方式使用它:

int myArray[10];
myArray[4] = 3;
std::cout << myArray[4];
Run Code Online (Sandbox Code Playgroud)

或者声明一个带有10x100元素的二维数组 int myArray[10][100];

甚至创建更复杂的三维数组 int myArray[30][50][70];

我甚至可以写作:

int complexArray[4][10][8][11][20][3];
complexArray[3][9][5][10][15][3] = 5;
std::cout <<  complexArray[3][9][5][10][15][3];
Run Code Online (Sandbox Code Playgroud)

那么,在声明数组时可以使用的最大维数是多少?

小智 27

该标准建议实现接受至少256(ISO 14882,B.2),但它们可能支持更少或更多:

限制可能会限制包括下面描述的数量或其他数量的数量.建议将每个数量后面的括号内的数字作为该数量的最小值.但是,这些数量仅是指导原则,不能确定合规性.

[...]

- 指针,数组和函数声明符(以任意组合)在声明中修改算术,结构,并集或不完整类型[256].

它在C++ 03和C++ 11中都是一样的.


小智 5

我的第一篇文章!

就其价值而言,我的系统在静态分配时的限制仅为 30 个维度,在堆栈上分配时为 19 个维度。系统是 AMD A10-7700K,64 位(8 GB RAM)。使用默认设置在 Visual C++ 2013 上编译。

请注意,为了确定系统上的最大值,请使用具有最小维度大小 (2) 的最小数据类型 (char)。当维度为 1 时没有限制,因为维度 1(在任何维度中)都是冗余的,并且不会影响数组的整体大小。按理说,数据类型越大或维度越大,可以拥有的维度就越少。然而,我发现任何一维(且只有一维)可以是 3,但不能是 4。

#include<iostream>
int main()
{
   char a[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
   char b[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!
   static char c[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
   static char d[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!

}
Run Code Online (Sandbox Code Playgroud)

  • 维度 1 并不冗余,因为“T”和“T[1]”具有不同的语义。 (2认同)