constexpr 和 const

constexpr 是 C++11 引入的关键字,用于指示编译器在编译时计算常量表达式。这个关键字可以用于变量、函数和构造函数,具有以下几个主要特点和用途:

  1. 定义与用途
    常量表达式:使用 constexpr 声明的变量或函数可以在编译时求值,以优化运行时性能。
    适用于编译时计算:可以在编译时计算值,而不是在程序运行时计算,从而提高程序的效率。
  2. constexpr 变量
    constexpr int max_value = 100; // 定义一个编译时常量
    这种情况下,max_value 是一个常量,可以在编译时使用。
  3. constexpr 函数
    constexpr int square(int x) {
    return x * x; // 编译时计算
    }
    constexpr 函数的返回值可以在编译时计算,前提是传入的参数也是常量表达式。

例如:
constexpr int value = square(10); // value 在编译时被计算为 100

  1. constexpr 构造函数
    在 C++14 及以后的版本中,constexpr 构造函数允许在运行时和编译时构造对象:

struct Point {
int x, y;

constexpr Point(int x, int y) : x(x), y(y) {}

};

constexpr Point p(1, 2); // p 在编译时构造

  1. 限制
    constexpr 函数中只能包含简单的语句(如返回、算术运算、条件语句等),不能包含复杂的逻辑,如动态内存分配、循环等(在 C++14 及以后的版本中,限制有所放宽)。
    参数必须是常量表达式。
  2. constexpr 与 const 的区别
    const 关键字表示常量,但其值可以在运行时确定;而 constexpr 强调必须在编译时计算值。
    constexpr 变量默认是 const 的,但 const 变量不一定是 constexpr。
  3. 使用场景
    提高性能:通过在编译时计算常量,可以减少运行时计算的开销。
    模板编程:在模板编程中,constexpr 可以用于生成类型安全的编译时常量。
    固定数组大小:在定义数组时,可以使用 constexpr 作为数组大小的常量。
    示例代码

include

constexpr int factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}

int main() {
constexpr int result = factorial(5); // 编译时计算
std::cout << "Factorial of 5 is " << result << std::endl; // 输出 120
return 0;
}

总结
constexpr 是 C++ 中一个强大的特性,使得程序可以在编译时进行更多的计算,从而提高效率和安全性。通过使用 constexpr,开发者可以更灵活地处理常量,利用编译时计算来优化程序性能。

posted @   陈浩辉  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
ヾ(≧O≦)〃嗷~
点击右上角即可分享
微信分享提示