C++11引入了constexpr(常量表达式)关键字,与const关键字有所不同。它们的主要区别如下:
1. const是给变量加上只读属性,而constexpr是给变量或函数加上常量属性。constexpr变量必须在编译时就可以计算出来,而constexpr函数的返回值也必须是常量并且在编译时必须可以计算出来。
2. constexpr可以用来定义数组和结构体等复杂数据类型,而const则只能用来定义单个变量。
3. constexpr变量通常被用作模板参数,因为在编译时就可以计算出来,可以用来定义数组大小和模板参数等。而const变量不一定在编译时就可以计算出来,不能被用作模板参数。
4. constexpr支持函数语义,可以使用条件语句和循环语句等语句,可以实现复杂的计算。而const只能包含简单的赋值语句,不能包含流程控制语句。
综上所述,constexpr是用来定义常量的关键字,只有在编译时就可以计算出来的值才能用它来定义。而const则是用来定义只读变量的关键字,它不能用来定义数组或结构体等复杂数据类型。