const和constexpr的区别

432 阅读1分钟

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的值
}