根据我的C++教材,下面的表达式:为什么你不能在C++中使用一个数组大小的变量?
cout << "Enter number of students\n";
cin >> number;
int score [number];
是一个非法表达。 我无法使用数组大小的变量。
为什么我不能这样做? (我没有寻找替代方案,我没有得到指针,向量等,但我想了解这种行为。)
根据我的C++教材,下面的表达式:为什么你不能在C++中使用一个数组大小的变量?
cout << "Enter number of students\n";
cin >> number;
int score [number];
是一个非法表达。 我无法使用数组大小的变量。
为什么我不能这样做? (我没有寻找替代方案,我没有得到指针,向量等,但我想了解这种行为。)
可变长度数组在ISO C90/ANSI C89中不支持从其派生C++。尽管在C99中添加了偏离C++的VLA,但在C++中它们可以说是不必要的,它具有STL容器类来提供更灵活的方法来存储多个对象。
另一方面,关于“它们在C++中可能是不必要的”,因为我们有一个积极的提议并且几乎什么都不是绝对必要的,所以它们在C++中也可以被认为是有用的*。 – 2014-09-29 03:56:20
@ Cheersandhth.-Alf:关于“有争议”的事 - 你可以为此争论。我不会说“一点都不是绝对必要的”,编程语言中的某些特征对于使它成为“图灵完成”是必要的。有人提议,但ISO委员会似乎没有人着急。 – Clifford 2014-09-29 09:01:26
在C++中,编译器必须知道要分配给数组的内存量在编译时。但是,变量的值在运行时间之前是未知的。这就是为什么你不能使用变量来表示数组的大小。
如果您需要为类项目使用数组,我建议使用const
来定义您允许的最大大小。稍后,您将学习如何使用其他技术,如指针和STL容器(如std :: vector)。
实际上并没有回答这个问题。另外,没有提到载体。 – 2014-09-29 03:07:22
请注意,这是一种仿古风格,自1998年以来,它是首选编写'std :: vector
@NeilKirk从技术上讲,你是对的,它不回答这个问题,但它确实提供了一个替代方案OP想要实现 – 2014-09-29 03:08:13
因为C++不允许它。 – 2014-09-29 03:04:03
从编译器的POV中查看它。在生成目标文件时,它应该为你的数组保留多少空间? – 2014-09-29 03:04:18
在C'int分数[数字];'是合法的。可变长度数组。 – chux 2014-09-29 03:05:45