c++ - C++中的数组分配在具有不同长度的堆栈上

标签 c++ visual-c++ g++ clang

<分区>

我惊讶地发现在 C++ 中可以在堆栈上分配变长数组(例如 int array[i];)。它似乎在 clang 和 gcc(在 OS/X 上)上都能正常工作,但 MSVC 2012 不允许这样做。

这个语言功能叫什么?它是官方的 C++ 语言功能吗?如果是,是哪个版本的 C++?

完整示例:

#include <iostream>

using namespace std;

int sum(int *array, int length){
    int s = 0;
    for (int i=0;i<length;i++){
        s+= array[i];
    }
    return s;
}

int func(int i){
    int array[i]; // <-- This is the feature that I'm talking about
    for (int j=0;j<i;j++){
        array[j] = j;
    }

    return sum(array, i);

}

int main(int argc, const char * argv[])
{
    cout << "Func 1 "<<func(1)<<endl;
    cout << "Func 2 "<<func(2)<<endl;
    cout << "Func 3 "<<func(3)<<endl;

    return 0;
}

最佳答案

您正在查看 GCC 的 variable length arrays .这是一个 GNU 扩展,不是标准的 C++。

关于c++ - C++中的数组分配在具有不同长度的堆栈上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17969694/

相关文章:

c++ - 神经网络在 OpenCV 3.0 中只返回 NaN

c++ - 我应该在 init 上设置类成员(需要动态分配)还是稍后分配

c++ - 使用 C++ 的分支模拟器

c++ - 静态库中的静态类成员变量不共享?

c++ - 字符串移动赋值交换值

c++ - 使用 nvcc (CUDA-RINSIDE) 正确链接目标文件

c++ - 尝试使用 std::sort 时出现以下错误:在模板中:调用的对象类型 'bool' 不是函数或函数指针

c++ - 有什么方法可以知道目录是否包含子目录?

c++ - VC++ LNK2001 : unresolved external symbol only when compiling on 64bit

c++ - 如何从字符串中获取前两个字符并在另一个字符串中使用这两个字符