C++ 在数组声明的情况下编译器和解释器如何工作

C++ 在数组声明的情况下编译器和解释器如何工作,c++,arrays,compiler-construction,interpreter,C++,Arrays,Compiler Construction,Interpreter,最近我在某个地方读到,如果在运行时给出数组维数,那么这样的程序可以解释,但不能编译 类似于下面的C++代码< /P> 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]; 它没有给出任何错误。

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

类似于下面的C++代码< /P>

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];
它没有给出任何错误。(我猜是因为它是解释的而不是编译的)

但为什么会有这种差异?

< P>第一,C++和java都是编译语言。C++还支持java中的动态分配:

< C++代码的问题是数组必须具有在编译时确定的常数大小。 但是你说:

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


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

a。Java是一种编译语言。这个验证是每个编译器实现的。我的问题不是关于java或C++,而是关于这样一个程序是如何编译的,但是可以解释,在运行时声明数组维数。你应该提到你需要在某个时候删除数组。
int m;
cin >> m;
int *a = new int[m];