转载:
C++17之『折叠表达式』_buknow的博客-CSDN博客
重点:
查看代码编译过程的网站:C++ Insights (cppinsights.io)
1.使用折叠表达式可以简化对C++11中引入的参数包的处理。
2.根据参数包的位置分为左折叠和右折叠,
3. 点在参数左边叫左折叠(...+t),点在参数右边叫右折叠(t+...)
4.根据操作的对象数量分为一元折叠和二元折叠.
5.左折叠和右折叠并不相同,加法和乘法的时候相同,减法和除法则不同
一:左折叠
1.一元左折叠
空参数会报错。
采用二元折叠,就是必须要有一个初始值,对于加法来说采用0做初始值使整个运算不受影响。
对于乘法采用1作为初始值。
二:右折叠
一元右折叠
同理,需要采用二元表达式解决空参数问题
三:左折叠和右折叠的减法
四:lamada和逗号表达式结合
五:折叠表达式的原理和参数包递归原理不同
折叠表达相当于特例化一个模板,这个模板的参数根据实例化参数的个数来表示
而递归是特例化所有参数模板。
查看代码编译过程的网站:C++ Insights (cppinsights.io)