constexpr 表示编译期可求值,const 仅表示运行期不可修改;constexpr 要求初始化表达式必须在编译期完全求值且隐含 const,而 const 变量未必是编译期常量。

C++中的constexpr和const有什么区别?(编译期常量)

constexpr 表示“编译期可求值”,而 const 仅表示“运行期不可修改”——这是最核心的区别。

const 只保证不可变,不保证编译期可知

声明为 const 的变量,只要初始化表达式不是编译期常量,它就只是运行期的只读变量。比如:

int x = 42;
const int a = x;  // 合法,但 a 不是编译期常量
constexpr int b = x;  // 错误!x 不是编译期常量

这里 aconst,但无法用在需要编译期常量的上下文中(如数组大小、模板非类型参数)。

constexpr 要求编译期可计算,且隐含 const

所有 constexpr 变量自动是 const 的,但它还额外要求:初始化表达式必须能在编译期完全求值。例如:

constexpr int c = 10 + 20;        // ✅ 编译期算出 30
constexpr int d = std::sqrt(16);  // C++20 起 ✅(若 sqrt 是 constexpr 版本)
constexpr int e = rand();         // ❌ 运行期函数,不满足

注意:constexpr 函数或构造函数也需满足“在传入编译期常量时能返回编译期常量”这一约束。

使用场景差异明显

小结:关键判断标准

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。