【发布时间】:2017-03-29 01:46:29
【问题描述】:
我可以为一维数组编写 operator new 如下:
int n{3};
new int[n];
它至少分配sizeof(int) * n 字节。但是当我想创建二维和更多维数组时,只有第一维可能是非常量的:
int n{3};
new int[n][3]; //ok
new int[n][n]; //error;
为什么会有这样的限制?是否有任何困难要确定,至少要分配 sizeof(int) * n * n 字节?
【问题讨论】:
-
你不能有自动存储的VLA,为什么要允许它用于动态存储?
-
StoryTeller,但是对于一维数组它可以工作,为什么不允许它用于更多维数组?
-
您没有 VLA,这意味着您无法拥有指向 VLA
int (*)[n]的指针,而这正是此类表达式需要返回的内容。 -
最后,这一切都归结为 C++ 标准委员会没有发现 VLA 作为 C++ 的必要补充。我无法查看这些会议的记录,所以我无法告诉你原因。
-
@StoryTeller 允许 VLA 具有动态存储但不允许自动存储是一个可行的选择(对 VLA 的常见抱怨之一是它有堆栈溢出的风险)。
标签: c++ arrays multidimensional-array variable-length-array