通八洲科技

C++ constexpr和const有什么区别?C++编译期常量使用指南【C++11】

日期:2025-12-16 00:00 / 作者:裘德小鎮的故事
constexpr 是编译期常量表达式,const 是运行时不可修改对象;前者必须在编译期求值并用于模板参数、数组大小等场景,后者仅保证初始化后不被修改,值可来自运行时。

constexprconst 都表示“不可变”,但本质完全不同:前者是**编译期可求值的常量表达式**,后者只是**运行时不可修改的对象**。简单说,const 不一定在编译期知道值,constexpr 一定在编译期就知道值且能参与编译期计算

const:只保证“不修改”,不保证“编译期可知”

const 变量只要求初始化后不能被修改,但它的值可以来自运行时——比如函数返回、用户输入、随机数等。

constexpr:强制“编译期可算出”,用途更严格也更强大

constexpr 变量必须用常量表达式初始化;constexpr 函数/构造函数,编译器会尝试在编译期求值(若参数满足条件)。

关键区别总结(C++11 视角)

实用建议:什么时候用哪个?

基本上就这些。记住核心:const 是运行时契约,constexpr 是编译期承诺。