constexpr与const的区别
constexpr与const的区别
- 示例
- 提问
- 编译时常量 vs 运行时常量
- 补充:
- 性能优化
示例
#ifdef _DEBUG
constexpr int debug = 1;
#else
constexpr int debug = 0;
#endif
提问
我不明白
constexpr int debug = 0;
与
const int debug = 0;
的区别
编译时常量 vs 运行时常量
- constexpr: 保证在 编译时 计算值。这意味着 constexpr 常量可以用于任何需要编译时常量的上下文,例如数组大小、模板参数等。
- const: 是一个 运行时常量。它的值不会改变,但不保证在编译时就能确定。编译器可能会在运行时对它进行初始化。
即,
constexpr int x = 42; // 编译时已知值
const int y = 42; // 运行时初始化的常量
- 用途:constexpr 常用于需要编译时常量的地方,const 更适合那些在运行时初始化的值。
补充:
性能优化
- constexpr: 不仅可以用于变量,还可以用于函数,意味着该函数的结果也必须在编译时计算。例如:
constexpr int square(int x) {
return x * x;
}
constexpr int val = square(5); // 在编译时计算
- const: 仅限于变量,不能用于函数。