constexpr 是编译期常量表达式,const 是运行时不可修改对象;前者必须在编译期求值并用于模板参数、数组大小等场景,后者仅保证初始化后不被修改,值可来自运行时。

constexpr 和 const 都表示“不可变”,但本质完全不同:前者是**编译期可求值的常量表达式**,后者只是**运行时不可修改的对象**。简单说,const 不一定在编译期知道值,constexpr 一定在编译期就知道值且能参与编译期计算。
const:只保证“不修改”,不保证“编译期可知”
const 变量只要求初始化后不能被修改,但它的值可以来自运行时——比如函数返回、用户输入、随机数等。
- int x = 42; const int a = x; // ✅ 合法,但 a 不是编译期常量
- const int b = rand(); // ✅ C++11 起允许(只要类型支持),但 b 仍不是编译期常量
- int arr[a]; // ❌ 错误!a 不是常量表达式,不能用作数组长度
constexpr:强制“编译期可算出”,用途更严格也更强大
constexpr 变量必须用常量表达式初始化;constexpr 函数/构造函数,编译器会尝试在编译期求值(若参数满足条件)。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~