C++ 面试题
目录

C++17 中折叠表达式 (fold expression) 的用法?

· 约 3 分钟读完 · 第 130 / 181 章

推荐答案

本题详细解读

折叠表达式简介

折叠表达式(Fold Expression)是C++17引入的一个新特性,用于简化可变参数模板中对参数包的操作。它允许在编译时对参数包中的元素进行折叠操作,常见的操作包括求和、求积、逻辑运算等。

语法形式

折叠表达式有以下几种形式:

  1. 一元右折叠:(pack op ...)
  2. 一元左折叠:(... op pack)
  3. 二元右折叠:(pack op ... op init)
  4. 二元左折叠:(init op ... op pack)

其中:

  • pack 是参数包。
  • op 是操作符,如 +, -, *, &&, || 等。
  • init 是初始值。

示例解析

在推荐答案中,我们使用了一元右折叠表达式 (args + ...),它的含义是将参数包 args 中的所有元素依次相加。

其他常见用法

  1. 求积:

  2. 逻辑与:

  3. 逻辑或:

注意事项

  • 折叠表达式只能在模板中使用,因为它依赖于参数包。
  • 折叠表达式的操作符必须是二元操作符,且操作符的优先级和结合性会影响折叠的顺序。
  • 折叠表达式可以显著简化代码,但过度使用可能会降低代码的可读性。