constexpr关键字

← 关键字与语法 | ← C++ 知识地图


constexpr int bufSize = 128;
 
constexpr int square(int x)
{
    return x * x;
}
 
int arr[square(4)];   // 编译期可求值
const int n = 10;     // 只读,但不一定是编译期常量

作用

constexpr 表示“尽量在编译期求值”。

它常用于:

  • 定义编译期常量
  • 写可在编译期计算的函数
  • 替代部分宏

要点

  • constexpr 变量必须能在编译期确定
  • constexpr 函数如果传入常量实参,结果可在编译期计算
  • 如果实参不是常量,也可以退化为普通运行时函数调用

和 const、inline 对比

关键字主要作用是否强调编译期求值典型场景
const只读,禁止修改不一定只读变量、只读参数
constexpr常量表达式,尽量编译期求值数组大小、模板参数、编译期计算
inline建议内联,主要解决函数/变量多重定义头文件函数、小函数、C++17 inline 变量

一句话区分:const 偏“不能改”,constexpr 偏“编译期就能定下来”,inline 偏“链接与展开层面的提示”。