-1

可能重复:
C/C++:允许运行时不带动态分配的数组大小?

我在一个班级,我们有一个简单的任务来编写一个函数,该函数返回一个指向动态数组的指针并提供一个存根来测试它。我已经完成了这项工作,所以我不会在作业上寻求帮助。在课堂博客上,另一位学生建议直观的是,应该能够int Array[size];size显然是用户定义变量的地方进行操作。

我知道在标准 C++ 中,至少根据我的文本,数组必须有一个“常量整数表达式......大于零”作为大小声明符。这对我来说意味着他们的例子行不通。事实上,使用 VS2010 时,您会遇到三个错误。

但是,他们解释说:

我知道,你知道,甚至我的 Ubuntu 安装中的 g++ 编译器和我的 WinXP 安装中的 Bloodshed 编译器都知道这一点。对于某些级别的“知道”,人们会期望“int Array[size];” 工作(就像在之前的两个课程中一样)。

但显然它无法在某些人的 VS 编译器上运行。只能假设,因为共同点是 VS(是的,我通过让朋友在他的盒子上检查确认了这一点),VS 是问题所在。几个之一。

已经有混乱,因为这I know that...部分是指我告诉他们不应该有任何理由来#include <new>使用new,但似乎他们认为我们同意不应该有任何理由使用new来分配动态数组。( ?)

所以问题很明显。是否有任何编译器可以接受int Array[size];,其中 size 不是const int没有错误的?

4

1 回答 1

4
int Array[size];

where sizeis not a constant expression is a variable length array。从 1999 年 ISO 标准开始,它们是 C 的标准功能。C++ 标准没有采用它们,但一些编译器支持它们作为语言扩展。

(任何 C++ 编译器,当以一致模式调用时,必须至少对具有非常量大小的数组类型发出诊断。)

顺便说一句,这与您使用的 IDE 没有直接关系。它由 IDE 调用的编译器控制。

至于#include <new>该名称有一个标准标题,但对于new内置于语言中的运算符来说不是必需的。标<new>头提供了几个重载版本operator new和一些其他声明。

于 2012-09-18T20:41:31.393 回答