全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++ constexpr和const的区别 c++编译期常量详解【辨析】

constexpr 表示编译期可求值,要求初始化为常量表达式;const 仅保证运行时不可修改,允许运行时初始化。constexpr 隐含 const,但 const 不隐含 constexpr。

constexpr 表示“编译期可求值”,强调表达式能在编译阶段被完全计算出来;const 表示“运行时不可修改”,只承诺对象初始化后值不变,不保证何时确定。

const 只管“不变”,不管“何时定”

const 变量可以依赖运行时信息初始化,比如函数参数、用户输入、系统时间等。只要初始化后不再改,就满足 const 语义。

  • int x = 42; const int a = x; // 合法:a 是 const,但值在运行时才确定
  • const int b = rand(); // 合法(C++11 起),b 是 const,但值随机且运行时产生
  • const int arr[5] = {1,2,3,4,5}; // 数组内容不可改,但数组本身不是编译期常量(不能用作模板非类型参数)

constexpr 要求“编译期可算尽”

constexpr 变量必须用常量表达式初始化;constexpr 函数在传入常量表达式时,必须能产出常量表达式;其本质是向编译器发出“请在编译期算出结果”的请求。

  • constexpr int c = 3 + 4; // 合法:纯字面量运算,编译期完成
  • constexpr int d = a; // 错误:a 不是常量表达式(即使它值固定,但未标记 constexpr)
  • constexpr int fib(int n) { return n

用途差异决定能否互换

有些场景强制要求编译期已知的值,const 不够,必须用 constexpr。

  • 数组大小:int arr[constexpr_val]; ✅ / int arr[const_val]; ❌(除非 const_val 是 constexpr)
  • 模板非类型参数:std::array → N 必须是常量表达式
  • case 标签:switch (x) { case constexpr_val: ... } ✅ / case const_val: ❌
  • static_assert 条件:static_assert(x > 0); → x 必须是常量表达式

constexpr 不等于“一定在编译期执行”

constexpr 函数具有双重身份:当参数是常量表达式时,它参与编译期计算;否则,它退化为普通函数,在运行时调用。

  • constexpr int square(int x) { return x * x; }
  • constexpr int s1 = square(5); // 编译期算出 25
  • int y = 7; int s2 = square(y); // 运行时调用,和普通函数无异

const 与 constexpr 可以共存,但语义不重叠

constexpr 隐含 const(constexpr 变量一定是只读的),但 const 不隐含 constexpr。显式写 constexpr const 没必要,因为 constexpr 已包含 const 语义。

  • constexpr int x = 42; // 等价于 const 且编译期可知
  • const int y = 42; // 是 const,但不是常量表达式(除非 42 是字面量且上下文允许提升)
  • constexpr const int z = 42; // 合法但冗余,C++ 允许,无实际增益


# c++  # 区别  # 常量  # const  # int  # 对象  # 求值  # 能在  # 请在  # 没必要  # 时才  # 不等于  # 使它  # 但未  # 其本质  # space 


相关文章: 建站之星云端配置指南:模板选择与SEO优化一键生成  如何访问已购建站主机并解决登录问题?  测试制作网站有哪些,测试性取向的权威测试或者网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  c++怎么用jemalloc c++替换默认内存分配器【性能】  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站主机与服务器功能差异如何区分?  为什么Go需要go mod文件_Go go mod文件作用说明  魔方云NAT建站如何实现端口转发?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何选择高效稳定的ISP建站解决方案?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  家庭建站与云服务器建站,如何选择更优?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  香港服务器如何优化才能显著提升网站加载速度?  如何高效完成独享虚拟主机建站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  建站之星伪静态规则如何正确配置?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何快速上传建站程序避免常见错误?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  北京企业网站设计制作公司,北京铁路集团官方网站?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何选择适合PHP云建站的开源框架?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  香港服务器WordPress建站指南:SEO优化与高效部署策略  北京网站制作网页,网站升级改版需要多久?  青岛网站建设如何选择本地服务器?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  建站之星下载版如何获取与安装?  如何实现建站之星域名转发设置?  制作网站公司那家好,网络公司是做什么的?  如何设计高效校园网站?  如何通过二级域名建站提升品牌影响力?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  如何高效搭建专业期货交易平台网站?  如何通过wdcp面板快速创建网站?  三星网站视频制作教程下载,三星w23网页如何全屏?  建站主机选购指南:核心配置优化与品牌推荐方案  如何在香港免费服务器上快速搭建网站?  已有域名和空间如何搭建网站?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  北京专业网站制作设计师招聘,北京白云观官方网站?  孙琪峥织梦建站教程如何优化数据库安全?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  C#怎么使用委托和事件 C# delegate与event编程方法  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。