数组的非const声明

Paw*_*iak 7 c++ gcc

我已经教自己编程了几年,我确信如果你需要变量编号的数组声明,你需要使用mallocnew.

今天我发现这在g ++版本4.4.4下编译,没有警告或错误:

#include <iostream>
using namespace std;

int main()
{
    int size_array;
    cin >> size_array;
    int iTable[size_array];

    for(int i=0;i < size_array;i++)
        iTable[i]=i*i;
    for(int i=0;i < size_array;i++)
        cout << iTable[i] << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果你使用gcc(更改后coutcin使用printfscanf),它也可以完全编译

在Visual Studio下,此代码无法编译,因为size_array它不是常量.

什么时候改变了?这是一种安全的方法吗?

Eri*_*rik 9

这是C99功能 - VLA - 它不是标准c ++的一部分.如果您的编译器支持它并且您不需要可移植性,则可以使用它.如果编译器支持它,那么使用它是完全安全的 - 但使用非标准功能是一个坏习惯.

  • @Tom:当然可以.VLA的堆栈分配一次而不更改,sizeof将提供实际大小.如果更改用于指示数组大小的变量,则无论是否为VLA都无关紧要 - 这是一个逻辑错误. (2认同)

Jon*_*Jon 5

这是gcc编译器扩展,而不是标准.