运行时const来定义数组大小

ami*_*shi 1 c++

可能重复:
C/C++:运行时的数组大小是否允许动态分配?

在下面的清单中,显然大小buf由运行时常量决定j.编译器如何生成代码以在堆栈上分配存储(不知道j编译时的值)?

#include<iostream>
#include<cstdlib>

using namespace std;

int main(){
  srandom(time(NULL));    
  int i = random();
  cout<< "random number: "<<i<<endl;
  if(i%2==0)
    i=2;
  else
    i=1;
  const int j=i;
  char buf[j];
  std::cout<<"size of buf array: "<<sizeof(buf)<<endl;
  return 0;   
}
Run Code Online (Sandbox Code Playgroud)

Ed *_* S. 5

我假设您使用的是gcc,因此也就是VLA扩展.这不是标准的C++,而是从C++ 0x(1x)中删除.

原因在于,由于类型系统较强,C++实现并不比C语言实现复杂得多.

实际上,如果你是堆栈分配未知大小的数组,你同时编写危险的代码,可能会很好地破坏堆栈.如果您知道大小,则它不是问题,否则只是动态分配它.当然有完全有效的用例,它是一个"很好的"功能,但他们最终决定反对它.

这是一个关于这个主题的好消息.