最近我在某处读到如果在运行时给出数组维度,则可以解释这样的程序但是不能编译。
就像下面的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];
它不会给出任何错误。 (我猜因为它被解释为未编译)
但为什么会出现这种差异呢?
答案 0 :(得分:2)
首先,C ++和Java都是编译语言。 C ++也支持你在Java中做的事情(动态分配):
int m;
cin >> m;
int *a = new int[m];
C ++代码的问题是数组必须具有在编译时确定的常量大小。
但你的说法是:
在运行时给出数组维,这样的程序可以被解释,但是不能被编译。
也是错误的,C,一种编译语言,支持可变长度数组。