相关疑难解决方法(0)

允许运行时没有动态分配的数组大小?

我已经使用C++几年了,今天我看到了一些代码,但这怎么能完全合法呢?

int main(int argc, char **argv)
{
    size_t size;
    cin >> size;
    int array[size];
    for(size_t i = 0; i < size; i++)
    {
        array[i] = i;
        cout << i << endl;
    }

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

根据海湾合作委员会编制.

如何在没有new或没有运行时确定大小malloc

只是为了仔细检查,我用谷歌搜索了一些和我的所有类似的代码声称存储大小错误.

甚至Deitel的C++如何编程p.共同编程错误4.5下的261个状态:

只有常量可用于声明自动和静态数组的大小.

给我看.

c c++ array-initialization

58
推荐指数
4
解决办法
4万
查看次数

使用非常量变量声明数组大小

我一直认为在C++中声明一个数组时,大小必须是一个常量整数值.

例如 :

int MyArray[5]; // correct
Run Code Online (Sandbox Code Playgroud)

要么

const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
Run Code Online (Sandbox Code Playgroud)

int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
Run Code Online (Sandbox Code Playgroud)

以下是Bjarne StroustrupC++编程语言中的解释:

数组的元素数量(数组绑定)必须是常量表达式(§C.5).如果需要变量边界,请使用向量(§3.7.1,§16.3).例如:

void f(int i) { 
   int v1[i];          // error : array size not a constant expression
   vector<int> v2(i);  // ok 
} 
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,上面的代码在我的系统上编译得很好!

这是我试图编译的内容:

void f(int i) {
   int v2[i];
}

int main()
{
   int i = 3;
   int v1[i];
   f(5);
}
Run Code Online (Sandbox Code Playgroud)

我没有错!我正在使用GCC v4.4.0.

有什么我想念的吗?

c++ arrays gcc

28
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×2

array-initialization ×1

arrays ×1

c ×1

gcc ×1