August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
为了简化简单可变参数模板的实现,C++17提供了一种遍历参数包中元素的有限形式。例如:
在本例中,sum()可以接受任意数目、任意类型的实参。假设sum()真的将实参相加,我们就可以编写像下面这样的代码:
sum的函数体使用了表达式折叠:
在这里,(v+...+0)表示以0为初始值,将v中的所有元素相加。第一个累加的元素是“最右”元素(下标最大的元素):(v[0]+(v[1]+(v[2]+(v[3]+(v[4]+0)))))。即,累加从右边的0开始。这被称为右折叠(right fold)。我们也可以使用左折叠(left fold):
现在,第一个累加的元素是“最左”元素(下标最小的元素):(((((0+v[0])+v[1])+v[2])+v[3])+v[4])。即,从左边的0开始。 ...
Read now
Unlock full access