主要观点:C++26 标准版本在推进中,已添加一系列语言和库特性,部分已被 Clang 和 GCC 支持,文中介绍了 C++26 的几个特性。
关键信息:
- 指定删除函数的原因:C++11 可声明删除函数,C++26 可指定删除原因,如
NonCopyable
类中复制构造函数和赋值运算符的删除原因说明,可帮助 API 作者提供更定制化的删除函数消息。详见P2573R2: = delete(“should have a reason”);。 - 无名占位变量:在某些情况下需声明变量但不使用其名,如结构绑定、锁等,C++26 可用单下划线
_
定义无名变量,在特定情况下会隐式添加[[maybe_unused]]
属性,且声明为_
的变量在不同存储期限等情况下有不同规定,详见P2169: A nice placeholder with no name。 - 结构化绑定声明作为条件:结构绑定可用于 for-range 声明等,C++26 可在
if
、while
、for
语句条件中声明结构绑定,如在使用std::to_chars
时可简化代码,详见P0963: Structured binding declaration as a condition。 - 用户生成的 static_assert 消息:
static_assert
的第二个参数现在可以是编译时用户生成的类似字符串对象,如使用假设的constexpr std::format
,详见P2471R3: user-generated static_assert messages。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。