C++26:核心语言中有更多的 constexpr

主要观点:constexpr自 C++11 加入语言后范围逐渐扩大,C++14 允许在constexpr中使用if等,C++17 增加了constexpr lambda,C++20 可在常量表达式中使用分配和std::vector等。本文主要探讨 C++26 中constexpr的演变,包括[P2738R1]从void*进行constexpr转换、[P2747R2]constexpr放置 new、[P2686R5]constexpr结构化绑定和对constexpr变量的引用等。
关键信息:

  • [P2738R1]:C++26 起可在常量表达式中从void*转换为T*,但转换到可相互转换或不相关类型不被允许,此变化旨在使一些标准库函数和类型能在编译时工作。
  • [P2747R2]:std::construct_at工具有限,需使放置 new 可在常量表达式中使用,[P2738R1]使从void*转换成为可能。
  • [P2686R5]:可声明constexpr结构化绑定,其行为类似引用,限制有所放宽,constexpr引用以前需绑定到具有静态存储持续时间的变量,C++26 起自动存储持续时间的变量在特定条件下也可被接受。
    重要细节:文中详细介绍了各提案的相关内容及背后动机,还提到后续文章将探讨标准库constexpr支持的演变,以及鼓励读者点赞、订阅新闻通讯和在 Twitter 上联系等。
阅读 23
0 条评论