1、
const
定义的变量,不要求在编译时就能被算出,也就是说可以由变量赋值constexpr
定义的变量,在编译时就能被算出,只能由常量表达式赋值
int x = 10;
const int i = x * x; 正确
constexpr int j = x * x; 编译器报错,x*x不是常量表达式
int x = 10;
const int i = x * x; 正确
constexpr int j = i; 错误,i不是常量表达式
也就是说constexpr
比 const
更常量一点。
const
可以说是在 【有了初值之后】,永远只读。- 而
constexpr
则是从 【没初始化的时候】 就已经是一个常量了
2、某些地方只能使用常量表达式
int x = 10;
const int i = x * x; 正确
constexpr int j = 10; 正确
int a[i]; 错误,i不是常量表达式
int b[j]; 正确,j是常量表达式