如何将int转换为const int以在堆栈上分配数组大小?

mem*_*emC 11 c++ stack integer const

我试图在堆栈上为固定大小分配一个整数数组

#include<iostream>
using namespace std;

int main(){

    int n1 = 10;
    const int N = const_cast<const int&>(n1);
    //const int N = 10;
    cout<<" N="<<N<<endl;
    int foo[N];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这会在我N用于定义固定的最后一行给出错误
error C2057: expected constant expression.

但是,如果我定义Nconst int N = 10,代码编译就好了.我应该如何将n1其作为一个特征来进行转换const int

我试过了: const int N = const_cast<const int>(n1)但这给了错误.

编辑:我正在使用MS VC++ 2008编译这个...用g ++编译好.

Jam*_*lis 18

我应该如何n1将其视为一种const int

你不能,不是为了这个目的.

数组的大小必须是所谓的积分常数表达式(ICE).该值必须在编译时可计算.甲const int(或其它const限定整型对象)可以在仅当它是本身与整数表达式初始化整数表达式中被使用.

非const对象(如n1)不能出现在Integral Constant Expression中的任何位置.

你考虑过用过std::vector<int>吗?

[注意 - 演员阵容完全没必要.以下两者都完全相同:

const int N = n1;
const int N = const_cast<const int&>(n1);
Run Code Online (Sandbox Code Playgroud)

- 末尾注意事项]

  • 只是添加一个细节:gcc将它编译为扩展 - 实际上,它允许其他表达式甚至不符合要求,例如`int x(int a){int b [a]; }` (2认同)