当前位置: 首页 > news >正文

【Effective Modern C++】第三章 转向现代C++:15. 尽可能使用constexpr

constexpr作用于对象时,是加强版的const;但作用于函数时含义截然不同 —— 它并非简单限定 “返回const值” 或 “结果编译期可知”,而是根据调用场景动态适配。

  • constexpr对象:必然具备const只读属性,且必须由编译期可知的值完成初始化(技术上是翻译期,包含编译 + 链接,编程层面可视为编译期)。

  • constexpr函数:不保证返回值是 const,也不保证结果一定编译期可知—— 结果是否编译期确定,完全取决于传入的实参:

    • 若实参是编译期已知的常量 → 结果在编译期计算,可用于 “整型常量表达式” 语境;
    • 若实参是运行期才能确定的值 → 函数退化为普通函数,在运行期计算结果。

编译期可知的常量整型值,可用于 C++ 要求 “整型常量表达式” 的核心语境:数组尺寸、整型模板实参(如std::array的长度)、枚举量的值、对齐修饰符(alignas)等。普通const对象无法满足这些场景(仅保证只读,不保证编译期初始化),因此:

所有constexpr对象都是const对象,但并非所有const对象都是constexpr对象。

constexpr函数的特性与限制:

  1. 适用语境:可同时适配 “编译期常量计算” 和 “运行期普通计算”,无需为两种场景编写不同函数;

  2. 类型限制:仅能接收和返回字面值类型(即编译期可确定值的类型,如内置类型、符合条件的自定义类型);

  3. 实现限制(C++ 版本差异):

    • C++11:函数体仅允许 1 行 return 语句,需用三元运算符替代 if-else、递归替代循环;
    • C++14:限制大幅放宽,支持循环、局部变量、void 返回值,甚至允许修改对象状态的成员函数(如自定义类型的 setter)。

自定义类型对constexpr的支持:

  • C++11:仅构造函数、返回字面值类型的const getter可声明为constexpr(成员函数隐式const);
  • C++14:可将修改对象状态的setter声明为constexpr(void 返回值也允许),能基于编译期对象完成更复杂的编译期计算(如Point类的中点、镜像点计算)。

注意:constexpr是对象 / 函数接口的核心组成部分—— 声明后若随意移除(如函数新增 I/O 语句),依赖它的客户端代码(如用在模板参数、数组大小)会直接编译失败,需长期遵守。

总结

  • constexpr对象都具备const属性,并由编译期已知的值完成初始化。
  • constexpr函数在调用时若传入的实参值是编译器已知的,则会产出编译期结果。
  • 比起非constexpr对象或constexpr函数而言,constexpr对象或是constexpr函数可以用在一个作用域更广的语境中。

原著在线阅读地址

http://www.jsqmd.com/news/324922/

相关文章:

  • 『NAS』Typora平替,一款所见即所得的MD编辑器-Haptic
  • 2026年口碑好的冷拉型钢轨道钢/冷拉型钢圆钢TOP实力厂家推荐榜
  • MinerU开源大模型部署案例:跨境电商平台商品图中文案OCR+多语言SEO关键词生成
  • Java多线程:synchronized方法独占锁的秘密
  • 2026年评价高的防沉触变剂/防沉剂抗流挂触变剂厂家选购指南与推荐
  • 2026年质量好的精密冷拉异型钢/冷拉异型钢六角钢实力厂家TOP推荐榜
  • 2026年比较好的注塑磁铁/粘结钕铁硼塑磁厂家推荐及选择指南
  • 天津资深大平层设计师|塑造松弛奢适居住感[特殊字符]
  • 2026年热门的卡通布牛津布/磨砂布牛津布行业内口碑厂家排行榜
  • es-api介绍 - 详解
  • 2026年质量好的纳米材料分散剂/高分子分散剂厂家最新热销排行
  • 2024信奥赛C++提高组csp-s复赛真题及题解:决斗
  • 2026年热门的工业空冷器/空冷器管束厂家最新用户好评榜
  • 版权信息要保留?开源项目使用规范
  • 互联网大厂Java面试:从分布式缓存到消息队列的技术场景解析
  • GLM-Image WebUI启动故障排查:加载失败/显存不足/依赖缺失解决方案
  • 2026年比较好的高鱼粉含量鲈鱼饲料/发酵蛋白鲈鱼饲料品牌推荐榜
  • 警告!你的RAG系统正在裸奔!USENIX Security最新论文揭示90%成功率攻击手法,附防御方案
  • 2026年评价高的网带式抛丸机/通过式抛丸机用户好评厂家排行
  • 2026年质量好的热镀锌电缆桥架/定制电缆桥架TOP实力厂家推荐榜
  • 2026年知名的酸洗冷轧带钢/黑退冷轧带钢厂家实力及用户口碑排行榜
  • 2026年口碑好的涂塑支架/支架厂家最新TOP实力排行
  • 2026年口碑好的60孔催化剂/船催化剂厂家最新实力排行
  • 2026年热门的立式排污泵/耐高温排污泵最新TOP品牌厂家排行
  • 2026年知名的化工离心泵/活鱼输送离心泵厂家推荐及采购指南
  • 2026年评价高的闭式循环水冷却塔/工业冷却塔用户好评厂家排行
  • 基于SpringBoot的建筑工程项目管理系统(源码+lw+部署文档+讲解等)
  • 2026年知名的胶辊/木业胶辊实力厂家TOP推荐榜
  • 基于SpringBoot的大连市IT行业招聘平台的设计与实现(源码+lw+部署文档+讲解等)
  • 2026年评价高的中温脱硝催化剂/蜂窝式脱硝催化剂厂家最新TOP排行榜