constexpr是C++11新增的功能,主要是用来表示const的“常量”含义。
const修饰变量,表示这个变量是不可修改的,因此必须进行初始化,一旦初始化就不能更改。
-
如果const变量的初始化值可以在编译时确定,则在编译时初始化
const int SIZE=100;//编译时初始化
-
如果const变量初始化值在运行时初始化,则在运行时初始化
vector temp; int len=temp.size();
但是const除了表达”常量“的含义之外,还有表达“只读”的含义
void process(const int x){
array<int,x> temp{1,2,3};//这里运行报错,因为x是一个只读变量,不是常量
}
void process2(){
const int x;
array<int,x> temp{1,2,3};//运行成功,这里的x是一个常量
}
为了解决这个双重语义的问题,C++11之后将“常量”这个含义划给了关键字constexpr。
“只读”和“常量”(不可修改)是两种含义
int main(){
int a=10;
const int &b=a;//表示b是一个只读变量
a=20;
cout<<b<<endl;//虽然b是只读变量,但是可以通过更改a来改变变量b的值
}