constexpr关键字
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 偏“链接与展开层面的提示”。