【发布时间】:2017-07-24 10:52:12
【问题描述】:
获取以下代码。
#include "iostream"
using namespace std;
unsigned power(unsigned b, unsigned e){return e?b*power(b, e-1):1;}//Raises base b to a power e
int main(int argc, char* argv[])
{const unsigned lev=5, len=power(2, lev)-1;
int arr[len]; //Error according to Microsoft visual studio
cout<<"The code worked."<<endl;
}
我的代码块编译器可以很好地分配数组,但 Microsoft Visual Studio 表示该行需要一个常量表达式。
我了解堆栈和堆动态分配之间的区别。但是在这种情况下,参数len 无论如何都是在编译时静态确定的。我将值存储在一个变量中(而不是直接使用 5),只是因为我的测试用例在每次运行程序时使用不同的len。
那么有什么方法可以让 Visual Studio 使用它吗?或者我应该诉诸动态分配,即使 CodeBlock 接受它?
【问题讨论】:
-
无法重现(VS2013)。您使用的是哪个 Visual Studio?
-
我正在使用 VS 2010。
-
将你的函数标记为
constexpr -
编译时常量和一旦初始化就不能修改的变量是有区别的。
标签: c++ visual-studio ide heap-memory dynamic-memory-allocation