为什么里面还要嵌套一个“小括号bbb”,来包围折叠的表达式(内部lambda2)?
为了每一轮都能定义新的 constexpr 局部变量:
在折叠表达式内部,如果你直接写一堆代码,它们在展开后会处于同一个作用域内。如果你直接连续写:
constexpr auto member = ...[0]; constexpr auto member = ...[1];
会导致变量名冲突(Redefinition)。
通过内部 Lambda 创造独立作用域:
小括号bbb 内部包裹着 [&]{ ... }(),这是一个闭包并立即执行。每一次折叠展开,都会开辟一个独立的 Lambda 局部作用域。
在 Is=0 的作用域里,member 属于 Is=0;
在 Is=1 的作用域里,member 属于 Is=1;
它们互不干扰,完美解决了编译期命名冲突和按顺序执行的问题。
【 在 DoorWay 的大作中提到: 】
: (
: ( [&]{ ... }() ),
: ...
: ...................
--
FROM 113.132.10.*