C++26: 一个没有名称的占位符

主要观点:

  • C++26 中提出了一个核心语言特性,即无名占位符_,可在同一作用域中多次声明。
  • 常规用_表示不使用或不在意其值的变量,但高警告级别下可能导致编译错误,需用[[maybe_unused]]标记。
  • 对于多个_变量,[[maybe_unused]]有时也无效,可使用std::ignore,但在结构化绑定等情况下不适用。
  • 新解决方案简单,在相同作用域多次使用_作为占位符,隐含[[maybe_unused]]属性,不能用于模板参数列表或requires子句。
  • 作者研究了对现有代码的影响,如在 GMock 中使用_匹配输入时,只要using namespace testing;_声明之前就无问题。
  • GCC 14 和 Clang 18 已实现此更改。

关键信息:

  • 常规用_表示未使用变量,高警告级别下需标记[[maybe_unused]]
  • std::ignore可用于某些情况,但在结构化绑定中不适用。
  • C++26 的无名占位符_可多次声明,隐含[[maybe_unused]]属性,有使用限制。
  • GCC 14 和 Clang 18 已实现该特性。

重要细节:

  • 示例代码展示了_在不同情况下的使用及问题,如在函数返回值、结构化绑定等中的使用。
  • 提到对 GMock 代码的影响及避免问题的方法。
阅读 6
0 条评论