C++ 面试题 目录

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

推荐答案

-- -------------------- ---- -------
-------- ----------

-------------------- -----
---- ----------- ----- -
    ------ ----- - ----- -- -----
-

--- ------ -
    --------- -- ------ -- -- -- -- -- ---------- -- --- --
    ------ --
-

本题详细解读

折叠表达式简介

折叠表达式(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. 逻辑或

注意事项

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