主要观点: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 上联系等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。