我大约6年前学过c ++而且我记得在关于数组的部分中,除非你用new实例化它们然后它们的大小是静态的,只能在带有文字常量的源代码中设置,而不是在运行时。
但我只是在玩
的教程http://www.cplusplus.com/doc/tutorial/dynamic/
并试图在没有新的情况下做到这一点,令我惊讶的是它有效。我误会了什么吗? 原始代码位于提到的URL,但是从下面的修改后的代码中查看它是不是很难。
我意识到字符串,向量等...数组并不是真的需要(可能解释了为什么这个问题从来没有发生在我身上)但只是幽默我:)
// rememb-o-matic
#include <iostream>
#include <new>
using namespace std;
int main ()
{
int i,n;
// int * p;
cout << "How many numbers would you like to type? ";
cin >> i;
int p[i];
// p= new (nothrow) int[i];
// if (p == 0)
// cout << "Error: memory could not be allocated";
if (false)
cout << "whut?" << endl;
else
{
for (n=0; n<i; n++)
{
cout << "Enter number: ";
cin >> p[n];
}
cout << "You have entered: ";
for (n=0; n<i; n++)
cout << p[n] << ", ";
// delete[] p;
}
return 0;
}
答案 0 :(得分:4)
代码有效,因为大多数编译器通过 compiler extensions 支持可变长度数组(VLA)。
但是,C ++标准不允许使用可变长度数组。使用这样的编译器扩展会导致代码不可移植且符合标准。
由于您使用的是gcc,请使用-pedantic
选项编译您的代码,它会告诉您它未经标准批准。
答案 1 :(得分:3)
C ++中没有迫切需要可变长度数组,因为它有向量。只需替换
int p[i];
与
std::vector<int> p(i);
一切都很顺利。