C++中的const可以声明运行时常量,但对于编译时常量有时却力不从心:
#include <iostream>
using namespace std;
const int GetConst(){return 1;}
int main(){
int a = 1;
enum T{t=GetConst()}; //无法编译,枚举需要编译时常量性
switch(a)
{
case GetConst(): //无法编译,switch需要编译时常量性
break;
}
return 0;
}
针对这种情况,C++11推出了编译时常量,即可以通过constexp来声明常量表达式:
#include <iostream>
using namespace std;
constexpr int GetConst(){return 1;}
int main(){
int a = 1;
enum T{t=GetConst()};
switch(a)
{
case GetConst():
break;
}
return 0;
}
可以定义struct类型的常量:
#include <iostream>
using namespace std;
struct A{
int data;
};
int main(void)
{
constexpr struct A a = {1};
cout<<a.data<<endl;
return 0;
}
运行程序输出:
1
注:由于要求编译期的常量,因此需要使用字面量或