2014-09-29 38 views
3

根据我的C++教材,下面的表达式:为什么你不能在C++中使用一个数组大小的变量?

cout << "Enter number of students\n"; 
cin >> number; 
int score [number]; 

是一个非法表达。 我无法使用数组大小​​的变量。

为什么我不能这样做? (我没有寻找替代方案,我没有得到指针,向量等,但我想了解这种行为。)

+4

因为C++不允许它。 – 2014-09-29 03:04:03

+0

从编译器的POV中查看它。在生成目标文件时,它应该为你的数组保留多少空间? – 2014-09-29 03:04:18

+0

在C'int分数[数字];'是合法的。可变长度数组。 – chux 2014-09-29 03:05:45

回答

4

可变长度数组在ISO C90/ANSI C89中不支持从其派生C++。尽管在C99中添加了偏离C++的VLA,但在C++中它们可以说是不必要的,它具有STL容器类来提供更灵活的方法来存储多个对象。

+0

另一方面,关于“它们在C++中可能是不必要的”,因为我们有一个积极的提议并且几乎什么都不是绝对必要的,所以它们在C++中也可以被认为是有用的*。 – 2014-09-29 03:56:20

+0

@ Cheersandhth.-Alf:关于“有争议”的事 - 你可以为此争论。我不会说“一点都不是绝对必要的”,编程语言中的某些特征对于使它成为“图灵完成”是必要的。有人提议,但ISO委员会似乎没有人着急。 – Clifford 2014-09-29 09:01:26

0

在C++中,编译器必须知道要分配给数组的内存量在编译时。但是,变量的值在运行时间之前是未知的。这就是为什么你不能使用变量来表示数组的大小。

如果您需要为类项目使用数组,我建议使用const来定义您允许的最大大小。稍后,您将学习如何使用其他技术,如指针和STL容器(如std :: vector)。

+1

实际上并没有回答这个问题。另外,没有提到载体。 – 2014-09-29 03:07:22

+0

请注意,这是一种仿古风格,自1998年以来,它是首选编写'std :: vector number;' – 2014-09-29 03:07:25

+1

@NeilKirk从技术上讲,你是对的,它不回答这个问题,但它确实提供了一个替代方案OP想要实现 – 2014-09-29 03:08:13

相关问题