int N = 5;
int arr[N];
编译器会报错:
error: variable length array declaration not allowed at file scope int arr[N]; ,但
N
就是
5
,不过编译器不知道这⼀点,于是我们需要声明为
const int N = 5
才可以。但
C++11
的
泛化常数
给出了解决⽅案
constexpr int N = 5; // N 变成了⼀个只读的值
int arr[N]; // OK
constexpr
告诉编译器这是⼀个编译期常量,甚⾄可以把⼀个函数声明为编译期常量表达式
constexpr int getFive(){ return 5; }
int arr[getFive() + 1];