【发布时间】:2013-07-31 11:55:10
【问题描述】:
我惊讶地发现在 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;
}
【问题讨论】:
-
按照目前的标准,这是不允许的。它是一个名为可变长度数组的编译器扩展。使用合适的编译标志,您的代码将无法编译。
标签: c++ visual-c++ g++ clang