与 IDE/编译器数组处理的差异[重复]

问题描述 投票:0回答: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];
,其中大小不是
const int
而不会出现错误?
    

c++ visual-studio g++
1个回答
4
投票
其中 
size

不是常量表达式,是一个

变长数组
。 自 1999 年 ISO 标准起,它们是 C 的标准功能。 C++ 标准尚未采用它们,但一些编译器支持它们作为语言扩展。 (任何 C++ 编译器在一致模式下调用时,必须至少对具有非常量大小的数组类型发出诊断。)

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

至于

#include <new>

有一个同名的标准头,但对于语言中内置的

new
运算符来说不是必需的。
<new>
标头提供了
operator new
的多个重载版本以及一些其他声明。
    

© www.soinside.com 2019 - 2024. All rights reserved.