在运行时确定大小的数组在C ++中是否有效?

时间:2011-12-02 20:11:04

标签: c++ arrays

所以我正在和我的朋友谈话,用一段代码帮助她,我一直认为数组需要是编译时常量,因为它们在堆栈中。但是她说她的朋友用这个代码做了这个:

#include <iostream.h>
#include <stdlib.h>
int main()
{
    int value = ' ' ;
    int sum = 0;
    int count = 0;
    cout<<"Please enter the total number of employees" <<endl;;
    cin>> value;
    int numbers[value];
    cout<<"Now enter the employees corresponding salaries" <<endl;;
    for (int k = 0; k < value; k++)
    {
        cin >> numbers[k];
    }
}

他们正在使用Dev-C ++。

此代码是否有效?我不认为。

4 个答案:

答案 0 :(得分:9)

可变长度数组是gccg++中的扩展...所以这在每个编译器中都不起作用。

有关gcc对可变长度数组的支持的更多信息,您可以看到documentation here

答案 1 :(得分:4)

我认为可变长度数组在C ++中是官方不支持的,但某些编译器和/或语言扩展实现了它们。

如果你想要一个可变长度数组,我建议使用std :: vector。 您可以在此处查看其参考:

http://www.cplusplus.com/reference/stl/vector/

答案 2 :(得分:2)

#include <iostream.h>

^不是标准标题。它曾经在预先标准的时间,即在1998年之前。它不存在于例如1998年之前。现代Visual C ++。

cin>> value;
int numbers[value];

可变长度数组或VGA是在C ++标准化一年后的C99中引入的。因此它们不是原始标准C ++的一部分,并且很高兴他们也没有被C ++ 11采用。而不是这样的野兽,使用例如来自std::vector标头的vector或其他标准库容器。

g ++支持可变长度数组作为语言扩展。你最好关掉这种扩展。如,

d:\dev\test> g++ foo.cpp

d:\dev\test> g++ -pedantic -std=c++0x -Wall -O foo.cpp
foo.cpp: In function 'int main()':
foo.cpp:11: warning: ISO C++ forbids variable length array 'numbers'
foo.cpp:7: warning: unused variable 'sum'
foo.cpp:8: warning: unused variable 'count'

d:\dev\test> _

答案 3 :(得分:0)

我尝试使用GCC 4.6进行编译,发现您发布的代码已成功编译。我也试过运行它,发现它有效,但我不认为代码非常好。