静态数组的行为有变化吗?

时间:2012-02-18 11:54:13

标签: c++ arrays dynamic static

我大约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;
}

2 个答案:

答案 0 :(得分:4)

代码有效,因为大多数编译器通过 compiler extensions 支持可变长度数组(VLA)。

但是,C ++标准不允许使用可变长度数组。使用这样的编译器扩展会导致代码不可移植且符合标准。

由于您使用的是gcc,请使用-pedantic选项编译您的代码,它会告诉您它未经标准批准。

答案 1 :(得分:3)

C ++中没有迫切需要可变长度数组,因为它有向量。只需替换

int p[i];

std::vector<int> p(i);

一切都很顺利。