-2

最近我在某处读到,如果在运行时给出了一个数组维度,那么这样的程序可以被解释但不能被编译。

就像在下面的 C++ 代码中一样

int m;
cin >> m;
int a[m];

我已经使用 turbo C++ 编译了它,它给了我一个错误,即数组声明需要一个常量表达式。(预期)

但在 Java 的情况下

int m;
Scanner input = new Scanner(System.in);
m = input.nextInt();
int[] a = new int[m];

它没有给出任何错误。(我猜是因为它被解释为未编译)
但为什么会有这种差异?

4

1 回答 1

2

首先,C++ 和 Java 都是编译语言。C++ 还支持你在 Java 中所做的(动态分配):

int m;
cin >> m;
int *a = new int[m];

您的 C++ 代码的问题是数组必须具有在编译时确定的常量大小。

但你的说法:

数组维度在运行时给出,这样的程序可以解释但不能编译。

也是错误的,C,一种编译语言,支持可变长度数组。

于 2013-08-12T14:53:13.110 回答